Frage

Dies ist, wie ich meine Exportfunktion zur Zeit erklärt habe:

extern "C" __declspec(dllexport)
Iexport_class* __stdcall GetExported_Class();

Wenn VS2008 die Quelle für diese kompiliert, erzeugt die DLL enthält diese unter ihrer Exporttabelle:

_GetExported_Class@0

Für die Kompatibilität mit anderen Compilern muss ich die oben Dekoration aussehen dieser Stelle:

GetExported_Class

Ändern die Aufrufkonvention __cdecl wird es auf die Art und Weise dekoriert ich will, aber die Konvention wäre falsch, so dass ich nicht verwenden kann. Ich brauche es, die Art und Weise __cdecl Aussehen dekoriert werden, sondern verwendet __stdcall statt.

Gibt es trotzdem, dies zu tun ohne eine DEF-Datei verwenden? Gibt es einen Schalter oder eine Option I den link.exe Linker passieren kann, die es schmückt die Exportnamen auf den Weg machen können ich will?

Danke

War es hilfreich?

Lösung

Nein. Alle __stdcall-Namen werden auf diese Weise eingerichtet. Ich bin erstaunt, dass Sie einige andere Compiler haben, die nicht __stdcall Exporte wie diese zu verzierenden erwarten wird. den Linker mit def Aufschalten ist so ziemlich alles, können Sie tun-, wenn Sie die PE-Datei nach der Produktion verändern wollen.

Andere Tipps

Ich verstehe nicht, warum Sie nicht möchten, eine DEF-Datei verwenden, aber das ist Ihre einzige Option.

Der Linker unterstützt einen Export-Schalter, aber es kann nicht mit Funktionen verwendet werden, die __stdcall kommentierten werden:

http://msdn.microsoft.com/en-US/library/ 7k30y2k5.aspx

Die def-Datei Art und Weise ist so ziemlich die einzige Lösung.

Ja:

Sie können /EXPORT zum lib.exe Befehlszeile hinzufügen oder eine #pragma zu Ihrer Quelldatei hinzufügen:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Oder noch einfacher: Im Inneren des Körpers der Funktion Gebrauch

#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

Quelle: https://stackoverflow.com/a/2805560/280534

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