2017-02-16 205 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函數。