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的调用约定:
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);
相关文章推荐
- java 解决调用c语言实现简单HelloWorld函数生成.dll动态链接库的32位dll文件无法在64位机上运行
- C语言编写DLL动态链接库并分别用VB和Python调用
- 在PB中调用其它语言开发的DLL动态链接库
- C#中动态调用DLL动态链接库
- jsp调用dll动态链接库
- VS2008创建和调用DLL动态链接库
- 如何用c语言调用c++做成的动态链接库
- dll动态调用出错了
- 如何用c语言调用c++做成的动态链接库
- 动态加载DLL后, 调用出错
- dll动态链接库之用类写配置文件和调用判断方法接口的实现中遇到的若干问题
- 在C语言中动态调用Native DLL(Windows平台)
- 如何用c语言调用c++做成的动态链接库
- 【转】C#生成dll文件:如何用C#编译生成dll文件即动态链接库文件供其它程序调用
- MFC创建动态链接库DLL并调用方法详解
- 如何用c语言调用c++做成的动态链接库
- java web JNative调用dll动态链接库:和注意方法
- Java调用第三方dll动态链接库
- Java调用C/C++编写的第三方dll动态链接库
- C++对dll链接库的显示(动态)调用和隐式(静态)调用