DLL中的函数

时间:2014-01-23 20:20:14

标签: c++ windows dll

我有一些带有一些功能的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();
    }
}

但是不要工作。找不到该功能。

1 个答案:

答案 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