2017-02-16 25 views
0

私はテストDLLを持っています。 DLLのイベント後、私はdllからexeへコールバック関数を使いたい。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"[email protected]"); 
    if (!callSum) 
    { 
     //cerr << "Failed to get function address" << endl; 
     FreeLibrary(hLib); 
     return 1; 
    } 

    callSum(3, 4); 

エラー:コンパイルTEST.DLLと

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

いただきました!間違っていますか?たぶん良い方法がありますか? ありがとうございます。

+0

.hファイルが壊れていて、getSum()が '__declspec(dllexport)'と宣言されています。これは、DLLをビルドする場合にのみ当てはまりますが、テストをビルドするときには当てはまりません。それは 'dllimport'です。マクロを使用して2つの中から選択すると定型句になります。 –

+0

myex.exeをリンクした後で、 "myexe.lib"ファイルも取得しているはずです。 これをtest.dllのlinkerコマンドに追加します。 – ssbssa

答えて

0

DLLに可変関数getSumを定義しましたが、宣言していません。 test.dllのgetSumを宣言すると、エラーを取り除くはずです。

1

あなたは循環依存関係があります:exeはdllのcallsum()に依存し、dllはdllのgetsum()に依存します。

コールバックが必要な場合は、関数ポインタを定義し、exeから関数をパラメータとしてdll関数に渡す必要があります。

関連する問題