㈠ 我正在学习用c#调用vc6制作的dll。报错:调用导致堆栈不对称
栈不对称一般是调用约定不一致。
比如VC6里面的声明时用__cdecl,而C#中没有指定__cdecl方式,则会出现以上错误。
C#中导出接口时使用__cdecl的方法:
[DllImport( "msvcrt.dll ", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
public static extern int Max(int a, int b);
不过看你上面的定义里看出Max这个函数为__stdcall(默认)。
你再按这个思路检查一下吧。
㈡ 调用dll命令后发现堆栈错误
VB6是吧。DLL文件中函数的调用方式应该为__stdcall
如果是默认的__cdecl就会出问题
㈢ 易语言 dll 堆栈错误(多返回)
把N,M从局部变量和参数中去掉,另设N,M为全局变量。
要多返回也好办,改返回值类型为文本型,最后,返回(到文本(N)+“,”+到文本(M))
取回这个文本后用分割文本也好,用寻找文本也好,分出多返回值就行。
㈣ 易语言调用DLL命令后发现堆栈错误怎么解决
堆栈错误一般是用因为用stdcall调用cdecl的函数。
在调用cdecl的函数前插入这句代码,就能自动平衡堆栈
-----------------------------------------
置入代码 ()
---------------------------------------------
就是该成:
----------------
置入代码 (“参考上面,不能用变量”)
test ()
------------------
最简单的还是改DLL的调用约定为 __stdcall
如果你还要源代码,请直接在网络发消息给我。
因为我懒得登陆邮箱了。
㈤ C#调用C++.dll库发生堆栈不平衡的问题。请问如何解决
声明调用方式,字符集了嘛?
不对称一般来说是参数问题,确保参数类型一致外还需要字符集类型一致,调用方式一致
一段设置调用方式。设置字符集的代码如下
[UnmanagedFuctionPointer(CallingConvention.StdCall,CharSet=CharSet.Unicode)]
接函数调用声明
㈥ 调用dll命令后发现堆栈错误怎么办
建议使用腾讯电脑管家
腾讯电脑管家电脑诊所针对commom.dll、MSVC**.dll、d3dx**.dll等常见的dll文件丢失问题,推出了一键修复功能。在网上下载安装腾讯电脑管家8.0版本后,打开程序,点击右上角“电脑诊所——软件问题——丢失dll文件”,进入dll一键修复区,找到相应要修复的dll选项,点击“立即修复”即可恢复正常。十分方便,建议试试。
㈦ 易语言调用DLL命令后发现堆栈错误
应该是调用某个dll里的某个函数!调试一下是不是真的堆栈错误?一般的是在函数调用约定上出问题导致堆栈失衡