2017-02-16 124 views
0

我有一个测试dll。在DLL中的事件后,我想使用从DLL的exe回调函数。从dll调用函数到exe C++

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"[email protected]"); 
    if (!callSum) 
    { 
     //cerr << "Failed to get function address" << endl; 
     FreeLibrary(hLib); 
     return 1; 
    } 

    callSum(3, 4); 

错误:

Error 18 error LNK2019: unresolved external symbol __imp_getSum referenced in function callSum test.obj test

与编译Test.dll的

什么错?也许有更好的方法? 谢谢。

+0

.h文件损坏,它将getSum()声明为'__declspec(dllexport)'。只有在构建DLL时才会出现这种情况,在构建测试时不能这样。然后它是'dllimport'。使用宏在两者之间进行选择是样板。 –

+0

链接myexe.exe之后,您应该已经获得了一个“myexe.lib”文件。 添加此链接到test.dll的命令。 – ssbssa

回答

0

您已在DLL中定义了变量函数getSum,但尚未声明它。在test.dll中声明getSum应该消除错误。

1

你有一个循环依赖:exe取决于dll中的callsum(),dll取决于dll中的getsum()

如果你想要回调,你需要定义一个函数指针,并将函数从exe作为参数传递给dll函数。