我有一些功能的dll。
header 示例:
__declspec(dllexport) bool Test()
;
我还有另一个简单的应用程序可以使用该功能:
typedef bool(CALLBACK* LPFNDLLFUNC1)();
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
bool uReturnVal;
hDLL = LoadLibrary(L"NAME.dll");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"Test");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
cout << "error";
}
else
{
// call the function
uReturnVal = lpfnDllFunc1();
}
}
但是不行。找不到该功能。
最佳答案
我的心理告诉我找不到该函数,因为您忘记将其声明为extern "C"
。
由于C++中的name mangling,如果该函数具有C++链接,则放入DLL导出表中的实际函数名称将比Test
更长,更乱码。如果改为使用C链接声明它,则它将以期望的名称导出,因此可以更轻松地导入。
例如:
// Header file
#ifdef __cplusplus
// Declare all following functions with C linkage
extern "C"
{
#endif
__declspec(dllexport) bool Test();
#ifdef __cplusplus
}
// End C linkage
#endif
// DLL source file
extern "C"
{
__declspec(dllexport) bool Test()
{
// Function body
...
}
} // End C linkage