C++ 从dll调用函数到exe c++;
我有一个测试dll。在dll中发生事件后,我希望使用从dll到exe的回调函数 test.dll h .cpp 迈克斯 .cpp 装载C++ 从dll调用函数到exe c++;,c++,dll,C++,Dll,我有一个测试dll。在dll中发生事件后,我希望使用从dll到exe的回调函数 test.dll h .cpp 迈克斯 .cpp 装载 hLib=LoadLibrary(L"test.dll"); if(hLib==NULL) { ... return -1; } callSumFn callSum = (callSumFn)GetProcAddress(hLib, L"_callSum@8"); if (!callSum
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);
hLib=LoadLibrary(L“test.dll”);
if(hLib==NULL)
{
...
返回-1;
}
callSumFn callSum=(callSumFn)GetProcAddress(hLib,L“_callSum@8");
如果(!callSum)
{
//cerr您已经在DLL中定义了变量函数getSum
,但尚未声明它。在test.DLL中声明getSum
应该可以避免错误。您有一个循环依赖关系:exe依赖于DLL中的callsum()
,DLL依赖于DLL中的getSum()
如果需要回调,则需要定义函数指针,并将函数作为参数从exe传递给dll函数。如果.h文件被破坏,它会将getSum()声明为\uu declspec(dllexport)
。这仅在您构建DLL时为真,而在您构建测试时则不为真。然后是dllimport
。使用宏在两者之间进行选择是样板文件。链接myexe.exe后,您还应该得到一个“myexe.lib”文件。将此文件添加到test.DLL的链接器命令中。
int callSum(int a, int b)
{
return getSum(a, b);
}
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);