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:et le code de la DLL compilée avec MinGW:
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
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; }----------------------------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.Et le fichier madll.def:
Code : Sélectionner tout - Visualiser dans une fenêtre à part dlltool --def madll.def --dllname madll.dll --output-lib madll2.dll
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 LIBRARY madll2.dll IMPORTS _imp__mafonction@0 = madll.mafonction EXPORTS mafonction=_mafonction@0
Partager