我有一个测试dll。在dll中的事件后,我想使用从dll到exe的回调函数。
Test.dll的 .H
extern "C" __declspec(dllimport) int __stdcall getSum(int , int );
extern "C" __declspec(dllexport) int __stdcall callSum(int , int );
的.cpp
int callSum(int a, int b)
{
return getSum(a, b);
}
myexe 的.cpp
extern "C" __declspec(dllexport)
int __stdcall getSum(int a, int b)
{
return a + b;
}
typedef int(__stdcall * callSumFn)(int a, int b);
并加载
hLib=LoadLibrary(L"test.dll");
if(hLib==NULL)
{
...
return -1;
}
callSumFn callSum = (callSumFn)GetProcAddress(hLib, L"_callSum@8");
if (!callSum)
{
//cerr << "Failed to get function address" << endl;
FreeLibrary(hLib);
return 1;
}
callSum(3, 4);
错误:
错误18错误LNK2019:未解析的外部符号__imp_getSum 在函数callSum test.obj test
中引用
使用compile test.dll
怎么了?也许有更好的方法? 谢谢。
答案 0 :(得分:1)
你有一个循环依赖:exe取决于dll中的callsum()
,而dll取决于来自dll的getsum()
。
如果你想要一个回调,你需要定义一个函数指针,并将exe中的函数作为参数传递给dll函数。
答案 1 :(得分:0)
您已在DLL中定义了变量函数getSum
,但尚未声明它。在test.dll中声明getSum
可以消除错误。