Eclipse mit MinGW und Dll in VBA unmöglich?

daha

Grünschnabel
Hallo,
ich habe mir das C++ Plugin für Eclipse mit MinGW installiert. Ich wollte mir eine DLL erstellen, die ich in VBA einbinden kann. Leider findet VBA er den Eintrittspunkt nicht.
Hierzu folgender Code:
Code:
#include "stdafx.h"
#include "windows.h"

#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)  __stdcall
#endif

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
};

EXPORT int addition(int a, int b){
	return a+b;
};

Das Beispiel funktioniert sehr gut mit VC++ aber mit g++ scheint das wohl nicht zu gehen?!
Die entsprechende def Datei musste ich erstellen ansonsten hatte das auch in VC++ nicht funktioniert. Habe schon ewigh gesucht aber immer noch erfolglos. Vielleicht weiß von euch jemand Rat?

Vielen Dank
 
Hi.

Das Problem ist, dass VB(A) nur Funktionen mit stdcall Aufrufkonvention aufrufen kann, diese Art von Funktionen aber in der DLL (vom Compiler) nach dem Muster _<name>@nummer benannt werden (wobei <name> für den ursprünglichen Namen der Funktion steht und nummer die Anzahl der Bytes der Argumente angibt).

Anscheinend ist VB(A) dann nicht in der Lage die Funktion in der DLL unter dem Standard-Namen zu finden, so das man manuell eingreifen muss. :rolleyes:

Zum Glück gibt es aber ein Tool für MinGW namens dlltool welches diese Aufgabe sehr vereinfacht:

exports.obj aus x.obj und y.obj generieren:
Code:
dlltool -A -e exports.obj x.obj y.obj
Die exports.obj Datei muss dann nur noch beim Linken angegeben werden. Die exportierten Funktionen werden dann unter dem Standardnamen und unter dem undekoriertem Namen bekannt gemacht.

Gruß
 
Zurück