Estoy tratando de crear una DLL que exporte una función llamada "GetName". Me gustaría que otro código pueda llamar a esta función sin tener que conocer el nombre de la función destruida.¿Cómo puedo detener el cambio de nombre de la función exportada de mi DLL?
Mi archivo de cabecera tiene el siguiente aspecto:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT TCHAR * CALLBACK GetName();
Mi código es el siguiente:
#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");
}
Cuando construyo, la DLL aún exporta la función con el nombre: "_GetName @ 0" .
¿Qué estoy haciendo mal?
Hey fresco esto es exactamente lo que necesito casi. ¿Y ahora si lo quiero al revés? Tengo la función C, está completamente bien para ser la función miembro de C++ (vtable, llamando a la convención todo hecho), pero el compilador cree que su nombre debe ser mutilado. – Pyjong
Sí, C y C++ usan reglas de decoración de nombres diferentes. Para hacer lo que pregunta, debe crear un contenedor que invoca la función C del miembro de la clase C++ – Dewfy
Un archivo .DEF es la única forma de desactivar el cambio de nombre. 'extern" C "' todavía usará decoración de nombre, pero no tan detallado como lo necesita C++. – IInspectable