Importer une DLL compilée avec MinGW dans un programme compilé avec Visual C++
Je n'arrive pas à utiliser une DLL compilée avec MinGW chargée depuis un programme compilé avec Visual C++. J'utilise LoadLibrary("madll.dll") et GetProcAddress(hDLL,"mafonction"). Apparemment la DLL est bien chargée mais GetProcAdress ne trouve pas la fonction.
Voici le code source du programme Visual C++, compilé avec prise en charge CLR et jeu de caractère multioctet:
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 30 31 32 33 34 35 36 37
| #include "stdafx.h"
#include "windows.h"
using namespace System;
typedef int (CALLBACK* LPFNDLLFUNC1)();
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
int uReturnVal;
int _tmain(int argc, _TCHAR* argv[]) {
uReturnVal = 0;
hDLL = LoadLibrary("madll.dll");
if (hDLL != NULL) {
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"mafonction");
if (!lpfnDllFunc1) {
// handle the error
Console::WriteLine("Fonction mafonction non trouvée.");
FreeLibrary(hDLL);
return 1;
} else {
// call the function
uReturnVal = lpfnDllFunc1();
Console::WriteLine("Valeur de retour: {0}",uReturnVal);
}
} else {
Console::WriteLine("DLL non chargée.");
}
return 0;
} |
et le code de la DLL compilée avec MinGW:
Code:
1 2 3
| extern "C" int __declspec(dllexport) __stdcall mafonction() {
return 16;
} |
----------------------------------------------------
Quand je crée la dll avec dlltool à partir d'un fichier .def, J'obtiens le message d'erreur au lancement du programme: madll2.dll n'est pas conçu pour s’exécuter sous Windows ou il contient une erreur.
Code:
dlltool --def madll.def --dllname madll.dll --output-lib madll2.dll
Et le fichier madll.def:
Code:
1 2 3 4 5
| LIBRARY madll2.dll
IMPORTS
_imp__mafonction@0 = madll.mafonction
EXPORTS
mafonction=_mafonction@0 |