utilisation d'une DLL en C...
Bonjour....
J'ai une DLL (et son source OUF :lol: ) et je souhaite l'utiliser dans un progamme en C. J'y arrive pas mal sauf que je souhaite appeler une fonction me renvoyant la version de la DLL. La fonction me permettant cela se présente comme suit:
Code:
1 2 3 4 5 6
|
function versionDLL(version: pchar): integer; stdcall;
begin
version:='V1.0';
versionDLL:=2; //j'ai rajouter ce parametre de retour pour vérifier que j'appelle bien la fonction
end; |
Mon programme C se présente de cette manière:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
typedef int (*Ptx1)(char *version) // prototype de la fonction
char version[5]=""; //pour recueuillir la version de la dll
int erreur=0;
PTX1 Ptr1;
HMODULE ModId;
//chargement de la DLL
ModId= loadLibrary("maDLL.dll");
//chargement de la fonction
ptr1 = getProcAdress(ModId, "versionDLL");
//utilisation de la fonction
erreur= ptr1(&version[0]); |
Ce programme me permet bien d'acceder à la fonction de la DLL puisque le paramètre de retour (Integer) et bien renvoyé (erreur=2)... En revanche il m'est impossible d'obtenir la version de cette dll dans le programme C.
En fait je me suis dit puis que ma DLL attend un Pchar (un pointeur sur une caractere) pourquoi pas lui envoyé l'adresse d'un tableau (&ersion[0]) afin que la DLL y range la version de la DLL...
Mais non j'ai tres mal pensé!!! :oops:
Quelqu'un peut il me dire ou j'ai faux et comment dois je m'y prendre pour récupérer ce numero de version???[/code]
merci d'avance :wink:
Re: utilisation d'une DLL en C...
Citation:
Envoyé par Mickey.jet
J'ai une DLL (et son source OUF :lol: ) et je souhaite l'utiliser dans un progamme en C. J'y arrive pas mal sauf que je souhaite appeler une fonction me renvoyant la version de la DLL. La fonction me permettant cela se présente comme suit:
Code:
1 2 3 4 5 6
|
function versionDLL(version: pchar): integer; stdcall;
begin
version:='V1.0';
versionDLL:=2; //j'ai rajouter ce parametre de retour pour vérifier que j'appelle bien la fonction
end; |
C'est donc du Pascal ou du Delphi. Le format des chaines n'est pas celui du C... (length, data) vs (data, 0)
Citation:
Mon programme C se présente de cette manière:
Code:
1 2
|
typedef int (*Ptx1)(char *version) // prototype de la fonction |
Euh, ça c'est pas un prototype, c'est un type pointeur de fonction...
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
char version[5]=""; //pour recueillir la version de la dll
int erreur=0;
PTX1 Ptr1;
HMODULE ModId;
//chargement de la DLL
ModId= loadLibrary("maDLL.dll");
//chargement de la fonction
ptr1 = getProcAdress(ModId, "versionDLL");
//utilisation de la fonction
erreur= ptr1(&version[0]); |
Ce programme me permet bien d'acceder à la fonction de la DLL puisque le paramètre de retour (Integer) et bien renvoyé (erreur=2)... En revanche il m'est impossible d'obtenir la version de cette dll dans le programme C.
En fait je me suis dit puis que ma DLL attend un Pchar (un pointeur sur une caractere) pourquoi pas lui envoyé l'adresse d'un tableau (&ersion[0]) afin que la DLL y range la version de la DLL...
Il faut savoir comment est codée la chaine 'Pascal', récupérer son adresse, en déduire sa longueur et la recopier dans une chaine C en plaçant le 0 comme il se doit...