Newsgroup: it.comp.programmare.win32
Titolo: TLB

Sono molti anni che non programmo in C e adesso
ho la necessità di sapere come caricare e usare delle classi
di un file TLB in VC++
Con VB non ho problemi infatti in riferimenti l'oggetto
è presente e perfettamente funzionante
Stranamente esso è mancante in add components di VC++
Ho provato a spulciare su google ma chiaramente sono
rimasto indietro di anni
Ho provato un pò di tutto
-CreateInstance(?) ma ho capito poco il suo funzionamento
-#Include "....myfile.tlb"
-incoporare l'idl datomi dall'OLE view (crea le classi ma non vado avanti)
ecc ecc
Qualche suggerimento
Ad esempio è possibile che un TLB ,forse creato in altro linguaggio(forse
Delphi),
non sia caricabile in VC++ ?
Non posso usare VB in quanto ho delle reti neurali che scrissi a suo tempo
in C e vorrei collegarle al programma che rilascia il TLB
B.-

Ci sono riuscito da solo !
Grazie x l'attenzione
B.- 

Puoi darmi qualche indicazione?
Che passi hai usato?
Grazie,
Gabriele.

> Che passi hai usato?
Devi prima creare i files di rife TLI (Interface) e TLH (header)
Apri VC++ e scegli come nuovo progetto un ATL-COM
in STD.H inserisci le seguenti dichiarazioni
...
..
//{{AFX_INSERT_LOCATION}}
#import "c:\...path completo \NOMETLB.tlb"
using namespace NomeDell'oggetto ;
// Microsoft Visual C++ will insert additional declarations immediately 
before the previous line.
..
..
è di vitale importanza che le dichiarazioni siano tra
//{{AFX_INSERT_LOCATION}}
e.....
// Microsoft Visual C++ will insert additional declarations immediately 
before the previous line.
Build l'ATL e nella directory, di lavoro,dovresti avere i files NOMETLB.TLI 
e NOMETLB.TLH
A questo punto sei pronto per creare un tuo progetto aggiungendo i file TLI 
e TLH
e ripetendo la direttiva #import.... nel file std.h
Nella ClassView dovresti avere tutte le classi incorporate nel TLB originale 
con il
suffisso "I" e pertanto per richiamare una classe devi inizializzarla
Esempio per il mio template Broker.TLB che ha le classi Stock e StockS
//Inizializza new  puntatore
 IApplicationPtr  Application;
 IStocksPtr Stocks;
 IStockPtr Stock;
//Se hr ==0 OK
 HRESULT hr=Application.CreateInstance("Broker.Application");
//Simile al CreateObject di VB
 Stocks=Application->Stocks;
 long StockQty=Stocks->Count-1;
 long CountIndex=-1;
 long i;
 for(i=0;i<=StockQty;i++)
 {
  Stock=Stocks->Item[i];
  if(Stock->Favourite)
  {
    .....
    .....
  }
 }
//Rilascia memoria
 Stock.Release();
 Stocks.Release();
 Application.Release();
NB
Per gestire la classe devi usare "." Esempio MyClass.CreateInstance(..) per 
acquisire metodi o proprietà "->"
Esempio MyClass->GetSoldi
Forse prima di usare CreateInstance si dovrebbe inizializzare tramite 
CoInitialize e chiudere con CoUninitialize
inoltre non ho ancora sperimentato il CreateInstance con un oggetto già 
aperto in altre parole non
ho capito quale sia il corrispondente al GetObject di VB
Essendo un novizio su ATL spero di essere stato chiaro
Avevo trovato altri metodi per creare TLH TLI tramite  MDIL.EXE ma credo che 
la mia procedura sia la più
facile
B.- 

 <snip>
in questo esempio c'è la via più semplice
http://www.mp2kmag.com/a122--c-c++.automation.ole.mappoint.html
ciao


http://www.mp2kmag.com/a122--c-c++.automation.ole.mappoint.html
Ti ringrazio della dritta  è più idonea rispetto alla mia procedura
Chissà se esiste qualche modo per importare la TLB in run-time nel caso non
si sapesse la path iniziale
Cmq ha ragione l'autore del testo Pur avendo i vecchi cd (originali) della 
MSDN
Library VS6.0 le info sulla gestione delle TLB sono scarse o nulle
B.-

 si sapesse la path iniziale
Sono d'accordo.. ne ho provato diverse ma questa è decisamente la più
diretta.
Sto facendo i miei test con la TLB di Gif89.dll (ottenuta con midl) e ora
riesco a far apparire giusto l'aboutbox..  :-)
Qualcuno sa dirmi come procedere per poter "contenere" l'oggetto nel form
che mi appare?
Volevo capire come fare senza usare il wizard MFC ed il toolbox..
Grazie
Gabriele.