Próbuję utworzyć bibliotekę DLL, która eksportuje funkcję o nazwie "GetName". Chciałbym, aby inny kod mógł zadzwonić do tej funkcji bez znajomości nazwy funkcji.Jak zatrzymać wywoływanie nazw funkcji eksportowanej przez bibliotekę DLL?
Mój nagłówek pliku wygląda następująco:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT TCHAR * CALLBACK GetName();
Mój kod wygląda następująco:
#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");
}
Kiedy budować, DLL nadal eksportuje funkcję o nazwie: "_GetName @ 0" .
Co robię źle?
Hej fajne to jest dokładnie to prawie co muszę. A co jeśli chcę tego na odwrót? Mam funkcję C, całkowicie w porządku, aby być C++ członkiem funkcji (vtable, wywołanie konwencji wszystko zrobione), ale kompilator twierdzi, że jego nazwa powinna zostać zmanipulowana. – Pyjong
Tak, C i C++ używają różnych reguł dekorowania nazw. Aby zrobić to, o co pytasz, potrzebujesz utworzyć wrapper, który wywoła funkcję C z klasy C++. – Dewfy
Plik .DEF to jedyny sposób na wyłączenie mangowania nazw. 'extern" C "' nadal będzie używać dekorowania nazw, po prostu nie tak gadatliwego jak to wymaga C++. – IInspectable