Frage

Wenn wir eine DLL mit __stdcall in Visual Studio 2008 kompilieren, lauten die Namen der kompilierten Funktionen in der DLL.

Funktionsname

Wenn wir jedoch dieselbe DLL mit GCC und wx-dev-cpp kompilieren, hängt GCC die Anzahl der Parameter an, die die Funktion hat, sodass der Name der Funktion mit Dependency Walker so aussieht.

FunctionName@numberOfParameters oder == FunctionName@8

Wie weisen Sie den GCC-Compiler an, @nn aus exportierten Symbolen in der DLL zu entfernen?

War es hilfreich?

Lösung

__ stdcall ziert die Funktionsnamen durch einen Unterstrich zu Beginn des Hinzufügen und die Anzahl von Bytes von Parametern an das Ende (getrennt durch @).

So eine Funktion:

void __stdcall Foo(int a, int b);

... würde _foo @ 8.

Wenn Sie die Funktionsnamen (undecorated) im EXPORTS-Abschnitt Ihrer DEF-Datei auflisten, wird exportiert undecorated.

Vielleicht ist dies der Unterschied?

Andere Tipps

Just -Wl,--kill-at auf der gcc Befehlszeile verwenden, die --kill-at an den Linker übergeben wird.

Referenzen:

Sie können auch verwenden -Wl,--add-stdcall-alias zu Ihren Linker-Optionen in GCC.Dadurch wird sichergestellt, dass beide Funktionsnamen (dekoriert und nicht dekoriert) vorhanden sind und als Alias ​​verwendet werden können.

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