Oppure

Loading
22/08/05 23:02
k4r3
Ciao a tutti,
vorrei sapere come posso includere una dll o una funzione api in un programma scritto in c++ (funzione api che proviene [quasi] sempre da una dll, no? eg kernel32.dll o advapi32.dll, giusto?)
aaa
23/08/05 8:29
pierotofy
Esistono due metodi, il primo ? pi? semplice, il secondo ? un tantino pi? difficile ma offre maggiore flessibilit?:

Il primo metodo consiste nel linkare relativo file .lib della dll in questione e di aggiungere l'header che contiene i prototipi delle funzioni definite nella dll stessa.

Metodo1.cpp:
------------
#include <windows.h>
#pragma lib <kernel32.lib>
#pragma lib <user32.lib>
#pragma lib <gdi32.lib>


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
/* MessageBox viene richiamata con successo! */
MessageBox(0,"","",0);

return 0;
}


Quando tuttavia non si disponde del relativo file .lib, ? necessario eseguire qualche passaggio extra.

Metodo2.cpp:
------------
/* Mettiamo che nella DLL sia presente una funzione "void SendKey(char ch);" */
typedef LPVOID (*LPSENDKEY)(char ch);
LPSENDKEY SendKey;
HINSTANCE hDLL = LoadLibrary("c:\percorso\mia\libreria.dll";);
SendKey = (LPSENDKEY)GetProcAddress(hDLL, "SendKey";);

SendKey('c'); /* Viene richiamata con successo SendKey */


Questa ? una breve introduzione, ti consiglio di approfondire meglio l'argomento se veramente ti interessa programmarci qualcosa.

Il mio blog: piero.dev
24/08/05 17:24
k4r3
E qual'? la procedura generale per richiamare una dll in programma c++?
thx
aaa
24/08/05 19:48
pierotofy
Postato originariamente da pierotofy:

HINSTANCE hDLL = LoadLibrary("c:\percorso\mia\libreria.dll";);

Ultima modifica effettuata da pierotofy 24/08/05 19:49
Il mio blog: piero.dev
24/08/05 22:47
k4r3
Dopodiche ? sufficiente conoscere la "sintassi" delle funzioni contenute all'interno della dll per poter chiamarle direttamente nel corpo del programma, giusto?
aaa
24/08/05 22:49
k4r3
Postato originariamente da pierotofy:

SendKey = (LPSENDKEY)GetProcAddress(hDLL, "SendKey";);

SendKey('c'); /* Viene richiamata con successo SendKey */


Inoltre penso di non aver capito questa riga: me la puoi spiegare? grazie!
aaa
26/08/05 12:49
pierotofy
In quella parte di codice, viene richiamata la procedura per impostare un puntatore a funzione, in modo che richiamando la variabile locale "SendKey", essa faccia riferimento alla funzione "SendKey" che ? nella DLL.
Il mio blog: piero.dev
26/08/05 17:51
k4r3
(LPSENDKEY) a cosa serve?
Ultima modifica effettuata da k4r3 26/08/05 17:54
aaa