Trasformare una lib in una dll

venerdì 03 marzo 2006 - 10.09

thrantir Profilo | Newbie

Questo e' il mio primo messaggio, quindi un doveroso saluto a tutti, e complimenti per il sito e il forum, risorse molto preziose :)

ho una bella gatta da pelare: ho realizzato una libreria in, col visual c++ 7.1, che viene utilizzata per gestire il windows media player, con un sistema prsonalizzato di playlist bla bla bla...

il problema: l'interfaccia grafica. Per fare in fretta, si e' pensato di usare visual basic, ma poco dopo ho scoperto che non potevo usare la mia lib statica, perche' per visual basic occore per forza una lib dinamica (dll)

da qui il grande interrogativo: che fare per trasformare la lib in una dll? Devi mettermi a cambiare ogni dichiarazione di funzione che va esportata?

Altra domanda: per esportare una classe e i suoi metodi, si agische solo sul .h? o sul .cpp? o su tutti e due?

Sono nelle vostre mani

Brainkiller Profilo | Guru

>il problema: l'interfaccia grafica. Per fare in fretta, si e'
>pensato di usare visual basic, ma poco dopo ho scoperto che non
>potevo usare la mia lib statica, perche' per visual basic occore
>per forza una lib dinamica (dll)

E' esatto, i file .lib li usi solo in Visual C++ in compilazione.

>da qui il grande interrogativo: che fare per trasformare la lib
>in una dll? Devi mettermi a cambiare ogni dichiarazione di funzione
>che va esportata?
>Altra domanda: per esportare una classe e i suoi metodi, si agische
>solo sul .h? o sul .cpp? o su tutti e due?

Si va esportata, qui hai un tutorial che ti può mettere sulla retta via:
http://www.dotnethell.it/articles/DLLVisualC.aspx

Leggi ad integrazione anche questo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=6572
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

thrantir Profilo | Newbie

grazie per la risposta

avevo gia; visto entrambe le cose, il mio dubbio e' come esposrtare i metodi di una classe

devo mettere " __stdcall" davanti alla definizione dei metodi? davanti alla loro implementazione? davanti alla dichiarazione di classe?

Chiedo scusa per le mie domande da niubbo, ma non ho trovato documentazione sull'esportazione di classi, ma solo sull'esportazione di funzioni a se' stanti...

Brainkiller Profilo | Guru

>grazie per la risposta
>avevo gia; visto entrambe le cose, il mio dubbio e' come esposrtare
>i metodi di una classe
>devo mettere " __stdcall" davanti alla definizione dei metodi?
>davanti alla loro implementazione? davanti alla dichiarazione
>di classe?

Allora, ho letto che poi questa classe la vuoi utilizzare da VB giusto ? Allora di solito è necessario anteporre __stdcall al prototipo della funzione nel listato C++. Poi come hai visto dal tutorial io uso anche un file .DEF. Una volta compilata la DLL (dinamica questa volta e non statica), le funzioni contenute nel file .DEF e con __stdcall saranno visibili esternamente.

Infatti per fare una verifica puoi utilizzare il comando dumpbin.exe sempre come indicato nell'articolo. quando avrai la certezza di questa cosa, puoi utilizzare la dll in VB, facendo la Declare come indicato nel Thread che ti ho suggerito.

Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

thrantir Profilo | Newbie

grazie ancora

forse ce l'ho fatta, ma se lancio dumpbin.exe sulla dll mi dice che non trova mspdb71.dll

Brainkiller Profilo | Guru

>grazie ancora
>forse ce l'ho fatta, ma se lancio dumpbin.exe sulla dll mi dice
>che non trova mspdb71.dll

Questo allora è un altro problema. O non hai installato completametne VisualC++ o ti manca quella DLL.
Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

thrantir Profilo | Newbie

strano, pensavo di aver fatto l'installazione completa... lunedì provo a verificare...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5