Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Api/dlls e c++
Forum - C/C++ - Api/dlls e c++

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 1:02
Martedì, 23/08/2005
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?)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 10:29
Martedì, 23/08/2005
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: https://piero.dev
PM Quote
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 19:24
Mercoledì, 24/08/2005
E qual'? la procedura generale per richiamare una dll in programma c++?
thx

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:48
Mercoledì, 24/08/2005
Testo quotato

Postato originariamente da pierotofy:

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



Ultima modifica effettuata da pierotofy il 24/08/2005 alle 21:49


Il mio blog: https://piero.dev
PM Quote
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 0:47
Giovedì, 25/08/2005
Dopodiche ? sufficiente conoscere la "sintassi" delle funzioni contenute all'interno della dll per poter chiamarle direttamente nel corpo del programma, giusto?

PM Quote
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 0:49
Giovedì, 25/08/2005
Testo quotato

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!

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 14:49
Venerdì, 26/08/2005
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: https://piero.dev
PM Quote
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 19:51
Venerdì, 26/08/2005
(LPSENDKEY) a cosa serve?

Ultima modifica effettuata da k4r$123 il 26/08/2005 alle 19:54
PM Quote
Avatar
k4r$123 (Ex-Member)
Rookie


Messaggi: 32
Iscritto: 13/08/2005

Segnala al moderatore
Postato alle 19:56
Venerdì, 26/08/2005
Inoltre, dove trovo qualcosa per informarmi meglio sull'argomento (librerie e c++[?])?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo