Frage

Ich habe eine DLL, es exportiert eine Funktion ...

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}

Ich kompile dies mit Code :: Blocks GCC Compiler (v3.4.5). Problem: resultierende DLL -Exporte dekorierter Funktionsname ...

MP_GetFactory@4

Dies kann nicht geladen, sollte einfach alt sein ...

MP_GetFactory

Ich habe dies für ungefähr 4 Stunden recherchiert. Ich denke, --add-stdcall-alias ist die Option, dies zu beheben. Mein Code :: Blocks Protokoll zeigt ...

mingw32-g ++. exe -shared -wl,-out-Implib = bin debug libgaingcc.a-wl,-dll obj debug se_sdk3 mp_sdk_audio.o obj debug se_sdk3 mp_sdk_common Gain gain.o obj debug gain gain.res -o bin debug gaingcc.sem --add -stdcall -alias -luser32

..so ich denke das ist die richtige Option dort? Aber kein Glück. Abhängige Walker zeigt nur den dekorierten Namen, der exportiert wird. Ich habe es dazu gebracht, __CDECL anstelle von __stdcall zu arbeiten, der Name wird dann OK exportiert, aber die Funktion verfälscht den Stapel, wenn er aufgerufen wird (weil der Anrufer die andere Anrufkonvention erwartet hat).

War es hilfreich?

Lösung

Tut mir leid, meine eigene Frage zu beantworten, schließlich herausgefunden.

Projekt-/Build-Optionen/Linker/andere Linkeroptionen -wl,-Kill-at

... tötet die Dekoration '@' Symbol usw.

Andere Tipps

Ich denke, es sollte-wl,-adddcall-alias und die Tricks "Kill-at" sein, die die generierte Importbibliotheksdatei nicht verwendbar machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top