易语言调用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 展开
//DllMain.cppint add(int a,int b)//导出函数原型
{
int c=a+b;
return c;
}
//def.def
LIBRARY "DllMain"
EXPORTS add 展开
2个回答
展开全部
调用方式是不是一样?易语言里面如果有能设置的话,把函数的调用方式设置成Cdecl或者 C语言方式 之类之类……没用过易语言不知道怎么设。不过多半是这个问题
实在找不到设置的地方的话,C语言代码改改,
int add(int a,int b)
改成
int __stdcall add(int a,int b)
实在找不到设置的地方的话,C语言代码改改,
int add(int a,int b)
改成
int __stdcall add(int a,int b)
追问
果然成功,但能不能告诉我__stdcall 是什么意思,不明白为什么很纠结的,是到出给所有语言都要加这个吗
追答
函数调用的时候分为三个步骤:
1、往栈里压入参数
2、转到函数所在代码执行
3、返回调用前的地方
有没有加__stdcall区别的地方在于3:
加了的话,返回的时候会把步骤1压入的参数全部清理掉
没加的话,返回的时候不会把步骤1压入的参数清理掉
函数返回时没有清理、但是易语言运行库认为它清理了的话,与期望不符,就出现“堆栈错误”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询