PDA

Visualizza la versione completa : [C++] Utilizzare una DLL in Visual C++


JVins
02-11-2006, 20:30
Ciao volevo chidere se qualcuno sa come fare per esguire una dll in visual c+ , io la devo solo lanciare non l'ho creata io ho provato con LoadLibrary ma non fa niente grazie .
ciao

oregon
02-11-2006, 20:39
Non hai ben chiaro il concetto di dll ... Una dll non si lancia (come se fosse un'applicazione).

Semplicemente si carica nello spazio di indirizzamento del processo che la usa (con la LoadLibrary) e si usano le funzioni esportate.

Non esiste "un punto" ben preciso dal quale "inizia" una dll, in quanto questa e' una collezione di funzioni richiamabili dal programma che la vuole usare.

Ovviamente il programma dovra' sapere quale funzione chiamare e quali parametri passare.

andbin
02-11-2006, 21:04
Originariamente inviato da JVins
Ciao volevo chidere se qualcuno sa come fare per esguire una dll in visual c+ , io la devo solo lanciare non l'ho creata io ho provato con LoadLibrary ma non fa niente grazie .
ciao LoadLibrary() serve solo per caricare la DLL (se non lo è già) nello spazio di indirizzamento del processo. Poi dovresti usare GetProcAddress() per ottenere l'indirizzo delle funzioni esportate dalla DLL che vuoi chiamare. Ovviamente devi conoscere tu il prototipo delle funzioni, cioè cosa vogliono come parametri e cosa restituiscono.
Alla fine del programma dovresti poi fare una FreeLibrary().

bigmickey
03-11-2006, 09:44
Se ti va bene con la dll trovi anche un .lib e un file di header con l' elenco dei prototipi delle funzioni esportate dalla stessa.

JVins
05-11-2006, 13:09
Ciao scusate se vi rompo ancora, ho provato a fare il loadlibrary e il getprocadress , ho visto che bisogna fare un HINSTANCE ma quando vado a lanciare il programma di dice che non riesce ad risolvere HInstance , SE qualcuno mi può fare vedere un pezzo di codice di come fare a lanciare una dll. e poi siccome la dll non l'ho creata io ma e un altro programma in visual c++ e la dll la crea in automatico , come faccio a vedere cosa c'è dentro visto che non so come aprirla grazie.

oregon
05-11-2006, 14:14
Scusa JVins ma stai facendo un po' di confusione ...

Ti era stato detto che non puoi "lanciare" una DLL ma ne esegui solamente le funzioni che sono esportate dopo averla caricata.

E devi sapere tu quali sono le funzioni esportate e soprattutto, quali parametri si aspettano e cosa restituiscono. Usare una DLL "al buio" non e' possibile (e non ha senso).

Se vuoi dare un'occhiata all'elenco delle funzioni esportate (ma non ai parametri), puoi usare l'utility dumpbin, ad esempio cosi'

dumpbin /EXPORTS kernel32.dll

In alternativa, puoi usare il tool Dependency Walker (depends.exe) che puoi scaricare da Internet ...

MItaly
05-11-2006, 14:16
Originariamente inviato da JVins
Ciao scusate se vi rompo ancora, ho provato a fare il loadlibrary e il getprocadress , ho visto che bisogna fare un HINSTANCE ma quando vado a lanciare il programma di dice che non riesce ad risolvere HInstance ,
"fare" un HINSTANCE? "Risolvere" un HINSTANCE? :confused: Posta il codice che hai scritto, che facciamo prima... :rollo:

SE qualcuno mi può fare vedere un pezzo di codice di come fare a lanciare una dll.
Come già detto una dll non si "lancia".


e poi siccome la dll non l'ho creata io ma e un altro programma in visual c++ e la dll la crea in automatico , come faccio a vedere cosa c'è dentro visto che non so come aprirla grazie.
Usa il Dependency Walker, incluso con il Visual Studio; assieme alle dependencies della dll ti fa vedere anche che funzioni esporta.
---EDIT---
Al solito Oregon mi ha battuto sul tempo... :incupito:

Loading