使用dll中的参数加载函数

时间:2017-09-20 05:58:10

标签: c++ dll

我在我的c ++代码中加载了一个dll,但在运行时我得到错误:

DLL:

`extern "C" __declspec(dllexport) int Add(int a,int b)
    {
       return a+b;
    }`

我的控制台文件:

typedef int(__stdcall *f_funci) (int , int);
int main()
{
    HINSTANCE hGetProcIDDLL = LoadLibrary("ConsoleApplication1.dll");
    if (!hGetProcIDDLL) {
        std::cout << "could not load the dynamic library" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    f_funci funci = 0; 
    funci = (f_funci)GetProcAddress(hGetProcIDDLL, "Add");
    if (!funci) {
        std::cout << "could not locate the function" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    int t = 0;
    t= (*funci)(2, 3);
    std::cout << "funci() returned "<<t<< std::endl;
    system("pause");
    return EXIT_SUCCESS;
}

此错误:enter image description here

1 个答案:

答案 0 :(得分:0)

__stdcall更改函数的调用方式。 在x86上调用__stdcall ...   推b;   推   叫fnAdd; #clack由被调用者恢复。与ret 8 要求__cdecl   推b;   推   叫fnAdd;   添加esp,8#restore stack。 这必须在功能上与正确的ret或ret 8相匹配。 在您的情况下,__ stdcall导致值a和b干扰维护函数帧的寄存器。