我有一些带有一些功能的dll。 标题例子:
__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();
}
}
但是不要工作。找不到该功能。
答案 0 :(得分:0)
我的通灵感告诉我找不到该功能,因为您忘记将其声明为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