我需要在 C++ 中动态加载一个 dll。
我按照本教程http://msdn.microsoft.com/en-us/library/ms235636.aspx创建了 dll,一切正常。
然后我跟着这个http://msdn.microsoft.com/en-us/library/64tkc9y5.aspx我已经调整了控制台应用程序如下:
typedef DOUBLE(CALLBACK* DllFunc)(DOUBLE, DOUBLE);
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDLL; // Handle to DLL
DllFunc dllFunc1;
DOUBLE p1 = 1.0, p2 = 2.0, r;
hDLL = LoadLibrary(L"MathFuncsDLL");
if (hDLL != NULL)
{
cout << "DLL loaded: " << hDLL << endl;
dllFunc1 = (DllFunc)GetProcAddress(hDLL, "MyMathFuncs@MathFuncs@Multiply");
if (!dllFunc1)
{
// handle the error
FreeLibrary(hDLL);
cout << "Function not found!" << endl;
return -1;
}
else
{
// call the function
r = dllFunc1(p1, p2);
cout << "The result is: " << r << endl;
}
}
else {
cout << "Dll not found" << endl;
return -1;
}
cout << "Press any key to exit." << endl;
int i;
cin >> i;
return 0;
}
DLL 已正确加载且不为空。问题是始终返回 0 的 GetProcAddress() 函数。
我已经尝试过命名空间、类名、方法名的每种组合。我尝试在函数名中使用范围运算符 (::) 而不是 @。
我试图将整个命名空间定义为 extern "C" 但没有任何变化。每次我运行或调试控制台应用程序时,它都找不到“乘法”功能。
我想我错过了一些东西......我哪里错了?
编辑
Dependency Walker 向我展示了以下导出表:
现在我想知道函数名的最后一部分是什么意思......为什么 __declspec(dllexports) 添加这些符号?