PDA

Visualizza la versione completa : [C++] Come usare le Dll


kirakira93
17-02-2010, 11:29
Ciao ragazzi
Prima di postare ho cercato in internet ma non ho trovato un gran che e non sono riuscito a compilare niente.
Volevo iniziare con una cosa semplice:



#include <iostream.h>

int main()
{

cout << "Ora verr richiamata la dll";

//Richiamo delle funzioni nella dll (non ho capito come si f)
//funz(1);
cin.get();
return 0;
}


Codice della .dll



//Volevo che risulatasse un codice equivalente a questo:

int funz (int var)
{
cout<<var;
return 0;
}


Grazie in anticipo

P.S. Dimenticavo il compilatore che uso: Dev-C++ 4.9.9.2

XWolverineX
17-02-2010, 13:28
Qui (http://tinyurl.com/ydvkjyg)

kirakira93
17-02-2010, 14:44
Grazie dopo lo provo ma quindi con questo carico il dll che poi posso utilizzare come posse un progetto modulare giusto?

oregon
17-02-2010, 15:58
"la" dll ... non "il" dll ...

kirakira93
17-02-2010, 17:13
cmq ho capito bene?

Caiodark
17-02-2010, 17:43
Hai capito bene.
Per usare la funzione contenuta nella dll dovrai dichiarare un puntatore alla funzione valorizzandolo con getprocaddress, fatto questo il puntatore alla funzione pu eseguire la funzione nella dll.

Tieni presente che questo il "link dinamico", serve principalmente per caricare funzioni che adoperi saltuariamente nel programma alla bisogna per poi eventualmente liberare le risorse quando non ti servono pi.

Se invece sono funzioni che adoperi in modo intensivo ti consiglierei di linkare la dll direttamente nel tuo programma (link statico).

kirakira93
17-02-2010, 18:04
Ho provato a implementare la dll con LoadLibrary, ma poi quando vado a richiamare la funzione mi d errore di compilazione perch non trova il contenuto della funzione cane():

ecco il semplice codice


#include <windows.h>

int cane();

int main()
{
LoadLibrary("C:\\Users\\Niko\\Desktop\\Dev-c++\\Progetto2.dll"
);
/*GetProcAddress(
0,
"cane"//?????????? serve questa funzione?
);*/

cane();
return 0;
}


ed ecco la dll


#include <windows.h>

int cane ()
{
MessageBox(NULL,"","",0);
return 0;
}

oregon
17-02-2010, 18:30
Ricordi che nelle costanti stringa il carattere \ si scrive \\ ??

kirakira93
17-02-2010, 19:13
Vero!!! Comunque oregon ho sistemato il backslash ma niente da fare stesso errore....

MItaly
17-02-2010, 19:15
Ovviamente dovrai:

nella dll, esportare la funzione cane tramite un file .def da dare in pasto al linker;
nell'eseguibile, dichiarare un puntatore a funzione con la stessa firma della funzione da richiamare;
dopo aver caricato la dll in memoria, dovrai quindi assegnare a questo puntatore il valore restituito dalla GetProcAddress.

Questo per quanto riguarda il link dinamico; all'atto pratico poi molto pi comodo usare il link statico con libreria di importazione, ma francamente le dll sono un argomento piuttosto ampio per poterle spiegare al volo su un forum. Per questo ti rimando alla documentazione ufficiale MSDN e al capitolo relativo alle dll che c' in qualunque libro di programmazione Win32 (per darti un'idea, il Rector-Newcomer dedica 50 pagine all'argomento, e non neanche troppo esaustivo).

Loading