Ich versuche, eine DLL zu erstellen, die eine Funktion namens "GetName" exportiert. Ich möchte, dass anderer Code diese Funktion aufrufen kann, ohne den Namen der entstellten Funktion kennen zu müssen.Wie kann ich die Namensänderung der exportierten Funktion meiner DLL stoppen?
Meine Header-Datei sieht wie folgt aus:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT TCHAR * CALLBACK GetName();
Mein Code sieht wie folgt aus:
#include <windows.h>
#include "PluginOne.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
EXPORT TCHAR * CALLBACK GetName()
{
return TEXT("Test Name");
}
Wenn ich bauen, die DLL exportiert nach wie vor die Funktion mit dem Namen: "_GetName @ 0" .
Was mache ich falsch?
Hey kühl das ist genau das fast, was ich brauche. Was nun, wenn ich es andersherum möchte? Ich habe C-Funktion, völlig in Ordnung, C++ - Member-Funktion (vtable, Aufruf Konvention alles getan), aber der Compiler Zahlen sein Name sollte gemangelt werden. – Pyjong
Ja, C und C++ verwenden unterschiedliche Regeln für die Namensdekoration. Um das zu tun, was Sie über Sie fragen, müssen Sie einen Wrapper erstellen, der die C-Funktion von C++ - Klassenmember aufruft. – Dewfy
Eine .DEF-Datei ist die einzige Möglichkeit, die Namensverfälschung zu deaktivieren. 'extern" C "wird immer noch Namensdekoration verwenden, nur nicht so ausführlich wie C++. – IInspectable