Wie kann ich den Namen Dekoration für __stdcall in C exportiert ändern ++?
-
12-10-2019 - |
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
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__)