bonjour, je viens de créer une dll qui va enfaite avoir pour but d'en utiliser une autre (d'un constructeur)
Dans une fonction de mon programme principale, je cherche à obtenir un pointeur vers une fonction de ma DLL par l'intermédiaire de GetProcAddress.
Je procède de la manière suivante :
//chagement de ma dll qui se charge correctement ( le pb n'est pas la)
const wchar_t* chars =
(const wchar_t*)( System::Runtime::InteropServices::Marshal::StringToHGlobalUni(chemin_dll)).ToPointer();
hDLL=LoadLibrary(chars);
if(hDLL == NULL)
{
MessageBox::Show("EPIC FAIL DLL ","Erreur",MessageBoxButtons::OK, MessageBoxIcon::Warning);
}
//et enfin j'utilise GetProcAddress
typedef void (WINAPI* DLLFUNC)(int num_carte, int num_io, float val);
DLLFUNC pFuncSetVal = (DLLFUNC)GetProcAddress(hDLL,"setVal");
Dans ma DLL je déclare la fonction setVal de la façon suivante :
void setVal(int num_carte, int num_io, float val)
{
val = (val/5)*255;
OutputAnalogChannel(num_carte, num_io, val); //fonction de la DLL du construc.
}
Après quelque recherche et l'étude du code de retour avec GetLastError, j'ai bien compris que pFuncSetVal était NULL .
Si je corrige mon code de la façon suivante :
extern "C" {
__declspec(dllexport) void setVal(int num_carte, int num_io, float val)
{
//code fonction setVal
}
}//fin extern
L'erreur suivante apparaît :
seconde liaison C d'une fonction surchargée 'setVal' non autorisée
Ce qui déclenche cette erreur c'est que la fonction OutputAnalogChannel est déclarée de la manière suivante dans un .h ( qui est inclut et qui est fournit par le constructeur)
extern "C" {
#define FUNCTION __declspec(dllexport)
FUNCTION void __stdcall OutputAnalogChannel(unsigned char CardAddress, unsigned char Channel, unsigned char Data);
}
Je voudrais savoir si qqun sais comment contourner cette erreur pour que enfin mon pFuncSetVal ne sois plus NULL ?!?
Si vous avez besoin de plus d'informations je suis à votre disposition. Je vous remercie de votre aide !
Partager