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 : 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;
}
et le code de la DLL compilée avec MinGW:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
dlltool --def madll.def --dllname madll.dll --output-lib madll2.dll
Et le fichier madll.def:
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