您的位置:首页 > 编程语言 > C语言/C++

C语言调用DLL动态链接库出错

2014-11-03 16:04 357 查看
动态加载dll后,执行导出的C API发生运行时错误:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.



这可能是函数调用约定不一致或者参数传递出错。

函数调用约定主要约束了两件事:

1.参数传递顺序

2.调用堆栈由谁(调用函数或被调用函数)清理

常见的函数调用约定:stdcall cdecl fastcall thiscall naked call

__stdcall表示

1.参数从右向左压入堆栈

2.函数被调用者修改堆栈

3.函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸

        用depends就可以看到函数的导出名。

设定导入C API的调用约定:

typedef int(__stdcall *FUNCP)(int);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c dll stdcall