Hello,

J'ai un petit problème dans l'utilisation d'un DLL que je crée.

Voici le code dans ma 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
#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;
};
Comme vous le remarquez, il s'agit d'une fonction avec un nombre de paramètres variables.

D'une autre application, j'essaie d'appeler cette fonction dans ma DLL (que je charge dynamiquement). Voici le code :

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);
 
      };
 
}
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 ?

Merci.