我有一些功能的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

10-04 14:48