Appel de function en chargeant une DLL codée en C
Bonjour,
J'ai codé en C une petite DLL qui a une fonction qui communique avec un driver spécifique.
L'une de ces fonctions de la DLL ne prends aucun paramètre.
Voici son prototype :
Code:
void DLL_EXPORT initMuxyLight()
Lorsque je charge ma DLL dans du code Python, l'appel se fait tout simplement comme ceci :
Code:
1 2
| dlltest = ctypes.CDLL("canInterfaceDll.dll")
dlltest.initMuxyLight() |
En revanche, cela a l'air d'être plus compliqué en C, voici le code pour charger une DLL et appeler une fonction (notez en C qu'il faut initialisé un type de pointeur de fonction) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include <Windows.h>
#include <stdio.h>
typedef UINT (CALLBACK* FUNCADDR)(DWORD,UINT);
int main (int argc, char *argv[])
{
HMODULE libHandle;
if((libHandle = LoadLibrary(TEXT("C:/Users/nassera/Desktop/testDLL/canInterfaceDll/bin/Debug/canInterfaceDLL"))) == NULL){
puts("load failed lol");
system("pause");
}else{
puts("dll is loaded OK");
system("pause");
FUNCADDR funcADDR;
funcADDR = (FUNCADDR) GetProcAddress(libHandle,"initMuxyLight");//adress of the function of muxy light initialisation
if(!funcADDR){
FreeLibrary(libHandle);
return -1;
}else{
printf("%04x\n",funcADDR);
system("pause");
funcADDR();
}
} |
Comme la fonction initMuxyLight() ne prends aucun paramètre, j'ai écrit funcADDR() de cette manière ci. Or, lorsque je fais tourner le programme, le compilateur me dit qu'il lui manque deux paramètres :
Citation:
67, 22 error: too few arguments to function call, expected 2, have 0
Cela est étrange, car comme nous l'avions vu, la fonction de la DLL ne prends aucun paramètres! :?
Du coup, j'ai passé deux paramètres aléatoirement, du genre et là ça marche!
Enfin, j'aimerais bien savoir pourquoi le programme demande deux paramètres alors qu'il ne devrait pas en avoir (j'ai également testé avec une fonction qui demande un unique paramètre et c'est exactement le même scénario).
En attendant vos réponses,
Merci