Hello,
J'ai un petit problème dans l'utilisation d'un DLL que je crée.
Voici le code dans ma DLL :
Comme vous le remarquez, il s'agit d'une fonction avec un nombre de paramètres variables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdarg.h> extern "C"__declspec(dllexport) __stdcall int Insert(AnsiString NomTable, ...); int __stdcall Insert(AnsiString NomTable, ...) { int total = 0; va_list params; AnsiString arg; va_start(params, NomTable); while (va_arg(params, AnsiString) != 0) { total ++; }; return total; };
D'une autre application, j'essaie d'appeler cette fonction dans ma DLL (que je charge dynamiquement). Voici le code :
Mon problème est le suivant : lors de l'appel à la fonction GetProcAddress, j'ai un retour NULL, ce qui veut dire que ma fonction n'est pas trouvée dans la DLL. Si je retire le fait qu'il y ait des paramètres variables, cela fonctionne sans problème. Quelqu'un peut-il m'aider afin de savoir comment appeler une fonction ayant des paramètres variables dans un DLL ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <stdarg.h> typedef int (__stdcall * MYDLLPARAMS) (AnsiString NomTable, ...); void __fastcall TForm2::Button1Click(TObject *Sender) { MYDLLPARAMS impfuncparams; HINSTANCE hinstdll; int iret; if ((hinstdll = LoadLibrary("DB.DLL"))) { impfuncparams = (MYDLLPARAMS) GetProcAddress (hinstdll, "Insert"); if (impfuncparams) { iret = impfuncparams("TEST", "TEST1", "TEST2"); }; FreeLibrary(hinstdll); }; }
Merci.
Partager