QLibrary::resolve avec une DLL Microchip
Bonjour à tous,
J'essaye d'utiliser une DLL (HID class.dll fournie par Microchip) mais la méthode QLibrary::resolve renvoie la valeur 0.
Voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QLibrary HID_class("HID class");
if (HID_class.load())
{
QMessageBox::information(this, "HID class", "Loaded");
typedef void (*HIDClassInitFunction)(unsigned short, unsigned short, unsigned short, unsigned short);
HIDClassInitFunction HIDClassInit = (HIDClassInitFunction)HID_class.resolve("HIDClassInit");
if (HIDClassInit)
{
QMessageBox::information(this, "HIDClassInit", "OK");
HIDClassInit(0x04D8, 0x0032, 64, 250);
}
else
{
QMessageBox::critical(this, "HIDClassInit", "NOK");
}
} |
La méthode est définie comme ceci (dans la doc Microchip)
Code:
1 2 3 4 5 6
| static void HIDClassInit(
unsigned int VendorID,
unsigned int ProductID,
unsigned int BuffSize,
unsigned int Timeout
); |
(il est aussi indiqué que les paramètres sont des "16 bit unsigned integer", c'est pourquoi j'ai remplacé les int par des short, mais cela ne fonctionne pas dans les deux cas).
Cette même doc précise aussi la chose suivante:
Citation:
The compilation setting must be /clr, /clr:pure or /clr:safe. This dll is a .NET assembly, so it can’t be used with a compilation setting that produces pure unmanaged code.
Je ne sais pas vraiment ce que cela signifie, et je me demande si c'est réelement compatible avec ce qui est indiqué dans la doc Qt:
Citation:
The symbol must be exported as a C function from the library. This means that the function must be wrapped in an extern "C" if the library is compiled with a C++ compiler. On Windows you must also explicitly export the function from the DLL using the __declspec(dllexport) compiler directive, for example:
J'utilise Qt 4.7.0 avec Visual C++ 2010 Express.
Merci pour votre aide.
Julien