从dll调用函数到exe c ++

时间:2017-02-16 08:40:46

标签: c++ dll

我有一个测试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

怎么了?也许有更好的方法? 谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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