Newsgroup: it.comp.programmare.win32
Titolo: Includere una classe in una DLL in VC++

Sono riuscito a creare una DLL  in VC++ 6.0 inserendo le mie funzioni nel
progetto sotto la forma :
void _stdcall nome_proc
e creando un file aggiuntivo .def contenente:
LIBRARY NOME_DLL
DESCRIPTION DLL FOR NOME_DLL
EXPORTS
    nome_proc    @1
Questo va bene per le funzioni. Come faccio se voglio inserire ina classe?
E in che modo posso poi richiamarla da VB?
Grazie :-).

 ha scritto nel messaggio
news:%_k7a.242089$0v.67...@news1.tin.it...

Forse dovresti spiegare meglio quello che intendi fare.
Le funzioni membro delle classi C++ hanno tutte un primo parametro
implicito, che e' il puntatore all'istanza di classe. In pratica e' il
valore del puntatore "this" all'interno della funzione membro.
Quindi utilizzare le classi C++ da VB diventa una vera impresa.
Forse quello che vuoi fare tu e' poter utilizzare la tua classe come un
oggetto VB:
oggetto.proprieta = valore
oggetto.medoto(parametro1,parametro2,...)
ecc...
se e' questo che vuoi fare allora ti devi appoggiare alla "tecnologia" COM.
Facci sapere.
Ciao. Federico.

 Ciao. Federico.
Esatto quello che voglio fare č proprio poter utilizzare la mia classe, che
ho fatto in VC++, come se fosse un oggetto VB.
In che modo lo posso fare?
Grazie

 Grazie
Non e' cosi' semplice, almeno non come lo e' esportare qualche funzione in
una DLL agganciata da VB. Se non sei vincolato ad un linguaggio in
particolare il modo piu' semplice e' creare un componente con VB.
Se invece lo devi fare in C++ ti si aprono, IMHO, due strade:
- ti appoggi a MFC
- crei un oggetto COM con la librearia ATL
Vi e' una terza strada, percorribile anche con il solo linguaggio C, che e'
quella di fare tutto da solo, senza l'uso di librerie. Usare MFC rende
abbastanza semplice creare l'oggetto, ma il codice finale risulta piuttosto
"pesante". Non ho esperienze dirette di questo metodo, ma so che e'
fattibile. Usare ATL rende l'oggetto finale piuttosto "light", ma occorre
avere conoscenze piuttosto specifiche su COM e ATL.
Forse esistono altri metodi, e qualcuno si fara' avanti per suggerirteli!
Ciao. Federico.

Ti consiglio di leggere la Q107501 e la Q122675 della Knowledge Base dal
sito di Microsoft.
Le trovi ai link
http://support.microsoft.com/default.aspx?scid=kb;en-us;107501
 e
http://support.microsoft.com/default.aspx?scid=kb;en-us;122675
Se vuoi esportare una classe Template, invece, devi tenere presete che non è
possibile esportarla normalmente in quanto un template non viene compilato
se non al momento dell'utilizzo in una qualche parte del tuo codice. Puo in
compenso usare la s'intassi d'istanziazione esplicita d'un template (con
declspec) ed esportare in una dll alcune versioni del template. Ovviamente
questo però uccide l'utilità del template stesso.
Ciao

Dimenticavo, per l'utilizzo di funzioni/classi definite in C++ dentro VB
devi creare una Type Library, da importare poi in VB.
Puoi leggere l'how-to 189133 dal sito di Microsoft, all'indirizzo
http://support.microsoft.com/default.aspx?scid=kb;EN-US;189133
 e magari
usarlo come base per ricerche successive.
Ciauz

 ha scritto nel messaggio
news:tqK7a.250229$0v.69...@news1.tin.it...

Non voglio portare avanti la mia idea a tutti costi,
ma mi sembra che quello che suggerisci tu funzioni per esportare in una DLL
delle classi C++ ad uso di un altro programma C++. Qui il linguaggio
"ospitante" deve diventare VB. L'uso di una type-library non migiora di
molto le cose, IMHO.
Federico.