㈠ 我正在學慣用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里的某個函數!調試一下是不是真的堆棧錯誤?一般的是在函數調用約定上出問題導致堆棧失衡