PDA

Visualizza la versione completa : [C++] Inserire dll esterna in un progetto


nicholas086
24-03-2012, 23:02
Ciao a tutti!
Devo chiedere questa cosa: devo fare un programma basandomi su una dll fornita da altri.
Assieme alla dll ho un file .c che contiene tutti i metodi della dll.
Ora la domanda è questa: siccome io solitamente programmo in java , e visto che adesso mi trovo a sviluppare il progetto in C++, come faccio a richiamare i metodi della dll in un progetto C++?
Grazie!

oregon
24-03-2012, 23:20
Ma nel file .c c'è tutto il sorgente della DLL?

nicholas086
24-03-2012, 23:28
No, vengono semplicemente richiamati i metodi della dll.

oregon
24-03-2012, 23:33
Allora nel codice viene caricata dinamicamente la DLL con la API LoadLibrary?

Puoi mostrare il codice C in questione?

nicholas086
24-03-2012, 23:38
Guarda, purtroppo adesso no perché sto usando il cellulare. Comunque non mi pare proprio che venga richiamata. Difatti LoadLibrary credevo di doverlo usare solo io nel mio progetto, e poi accedere ai singoli metodi. Solo che non conosco la sintassi da usare, ma non penso che dovrebbe essere troppo complicata.
Fondamentalmente non credo che il file .c sia necessario. Forse serve solo per lo sviluppo della DLL.
Tu mi sapresti dire in due righe come si accede a una DLL in C?

oregon
24-03-2012, 23:43
Partiamo dal fatto che non si dice in "due righe" come fare.

Se hai il file .LIB (import library) corrispondente, puoi usarla direttamente indicandola al tuo compilatore.

Se non l'hai, puoi ottenere la Import Library in questo modo

http://support.microsoft.com/kb/131313/en-us

Ovvero, senza import library, puoi caricare la DLL dinamicamente con la

LoadLibrary
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx

e ottenere un puntatore alle funzioni da chiamare con la

GetProcAddress
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683212(v=vs.85).aspx

Naturalmente dovrai conoscere tutto sui parametri delle varie funzioni, magari avendo il corrispondente file header .H o ricavandolo dal tuo .C

Praticamente non ti posso dire nulla di più senza vedere il .C in questione.

nicholas086
24-03-2012, 23:50
Scusa, so che "due righe" è una definizione sfortunata. Comunque grazie, sei già molto utile così.
Mi ricordavo infatti che servisse la import library, ma io non ce l'ho. Proverò a fare come dici. Il discorso delle due righe nasce dal fatto che sono un po' stretto coi tempi e mi trovo a lavorare con un linguaggio del quale sono poco pratico.Solo che fare la stessa cosa in Java sarebbe stato un suicidio

nicholas086
24-03-2012, 23:52
Aggiungo: i parametri da passare alle varie funzioni li conosco perché ho tutta la documentazione della DLL

oregon
24-03-2012, 23:53
Se vuoi/puoi mostrare il .C (o parte di esso) ti posso dare una mano più praticamente ...

nicholas086
24-03-2012, 23:56
Grazie, spero di poterlo fare domani, quando sarò davanti al pc.

Loading