易语言调用C语言的dll堆栈错误!

我用C语言写的dll代码如下//DllMain.cppintadd(inta,intb)//导出函数原型{intc=a+b;returnc;}//def.defLIBRA... 我用C语言写的dll代码如下
//DllMain.cppint add(int a,int b)//导出函数原型
{
int c=a+b;
return c;
}
//def.def
LIBRARY "DllMain"
EXPORTS add
展开
 我来答
空雪梦见
2013-04-16 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1198万
展开全部
调用方式是不是一样?易语言里面如果有能设置的话,把函数的调用方式设置成Cdecl或者 C语言方式 之类之类……没用过易语言不知道怎么设。不过多半是这个问题
实在找不到设置的地方的话,C语言代码改改,
int add(int a,int b)
改成
int __stdcall add(int a,int b)
追问
果然成功,但能不能告诉我__stdcall 是什么意思,不明白为什么很纠结的,是到出给所有语言都要加这个吗
追答
函数调用的时候分为三个步骤:
1、往栈里压入参数
2、转到函数所在代码执行
3、返回调用前的地方

有没有加__stdcall区别的地方在于3:
加了的话,返回的时候会把步骤1压入的参数全部清理掉
没加的话,返回的时候不会把步骤1压入的参数清理掉

函数返回时没有清理、但是易语言运行库认为它清理了的话,与期望不符,就出现“堆栈错误”
FanyongYin
2013-04-16 · TA获得超过1054个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:1012万
展开全部
也就是说调用本身没有错误,而是在调用之后的处理存问题?

那就检查看看打开DLL之后是否正确地关闭free掉了
追问
怎么检查
追答
那就从代码开始Open DLL的地方开始检查,到获取add函数句柄,再到调用完成之后释放DLL资源为止
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式