|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Mar 2006
Messaggi: 8
|
[c++] accesso alle funzioni delle DLL
ciao, mi trovo x le mani una dll della quale conosco il prototipo delle funzioni, alle quali devo accedere da un programma c++ compilato con DevCpp... quali sono le istruzioni per importare le funzioni delle dll? vi prego datemi una mano!
![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Guarda ... io il Dev-C++ ce l'ho installato ma non lo uso (l'avevo provato) perché non mi piace ![]() Comunque ho visto che il Dev-C++ ha un tool chiamato "dlltool". Dovresti provare a fare così: - crei un file chiamato nomedll.def con dentro: EXPORTS nomefunzione1 nomefunzione2 ...ecc... - usi dlltool con: dlltool -D nomedll.dll -d nomedll.def -l nomedll.a Dovrebbe crearti la import library nomedll.a che devi poi aggiungere, per la fase di link, al tuo progetto. Non ne sono sicuro al 100%, comunque, ripeto, prova così. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Mar 2006
Messaggi: 8
|
si l'ho fatto, ho estratto il .def con un altro tool e poi ho creato il .a, che ho copiato nella cartella lib... ma a questo punto come faccio a chiamare le funzioni?
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Mar 2006
Messaggi: 8
|
mhm... quindi se ho il .a nn devo caricare la dll.... ma x importare il .a nel progetto come si fa?
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Mar 2006
Messaggi: 8
|
up! se volete vi posto il codice del .def x vedere se è corretto, vi prego è importante! ci devo fare la tesina!
![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#8 |
Utente sospeso
Iscritto dal: Oct 2002
Messaggi: 2156
|
se vuoi linkarla staticamente devi leggerti la documentazione del tuo IDE per capire cosa fare...io uso il visual studio e ci sono delle directories apposta per per le librerie.
se vuoi linkarla dinamicamente devi dichiararti dei puntatori a funzione che rispettino i prototipi delle funzioni che ci sono nella dll, fare una loadlibrary (e alla fine una freelibrary per scaricare la dll), poi fare la GetProcAddress su ogni puntatore a funzione dopodichè chiami con questi puntatori a funzione le funzioni della dll.
__________________
sign editata dallo staff |
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: Mar 2006
Messaggi: 8
|
perfetto sono riuscito,grazie a tutti! se a qualcuno interessasse, si deve fare in questo modo:
ammesso che la funzione da chiamare abbia ad esempio il prototipo Codice:
long somma(long a, long b); Codice:
typedef long (CALLBACK* LONGLONG2LONG)(long, long); Codice:
HINSTANCE hDLL; Codice:
LONGLONG2LONG somma; Ora va caricata la dll: Codice:
hDLL = LoadLibrary("MiaDLL.dll"); Codice:
somma = (LONGLONG2LONG)GetProcAddress(hDLL,"somma"); Codice:
FreeLibrary(hDLL); ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Se riesci a generare una import library, prova a linkare la libreria in modo statico e non dinamico, che è il metodo migliore. Il caricamento dinamico delle dll normalmente si usa quando si devono gestire situazione particolari, ad esempio per la gestione "generica" di plug-in e cose del genere.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#11 |
Utente sospeso
Iscritto dal: Oct 2002
Messaggi: 2156
|
mi pare di capire che tu abbia risolto...evidentemente non ne hai avuto bisogno,ma in genere quando si definisce un puntatore a funzione per chiamare una funzione di una dll si specifica anche la convenzione di chiamata...... probabilmente le funzioni della tua dll hanno come convenzione di chiamata _stdcall quindi va già bene così....... io ci sono impazzito tempo fa su una cosa simile....
__________________
sign editata dallo staff |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:10.