动态加载DLL后, 调用出错

152 篇文章 1 订阅
动态加载DLL后, 调用出错


动态加载DLL后, 可以获得函数地址, 但是一调用就报错.

报如下的错误:
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.


排查:
只要该DLL函数有参数都会报错.
一下子联想到: __stdcall__cdecl的问题.
例如:
原来是这么声明:
typedef int (__stdcall *Fun1)(bool bEnable);
现在改为
typedef int (__cdecl *Fun1)(bool bEnable);


调用了一下, 没报错了.


所以在动态加载DLL是, 要注意该DLL导出的函数的声明类型
通常:
MFC的dll默认的入栈方式为 __stdcall方式的
而 Win32 DLL 默认的入栈方式为 __cedcall方式,不是__stdcall方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值