對 PInvoke 函數的調用導致堆棧不對稱。原因可能是托管的 PInvoke 簽名與非托管的目標簽名不匹配。請檢查 PInvoke 簽名的調用約定和參數與非托管的目標


解決此類方法

一般式C#調用C++封裝的dll時 ,出現的警告 ,在正常編譯之后如果不是debug那就不會有問題,只是在debug的時候感覺比較煩。

1. Long的類型應該是C# int類型。一般常見。

2.,CharSet=System.Runtime.InteropServices.CharSet.Ansi,添加編碼格式 我沒有遇到過時這樣的問題出現的原因。

3.添加  CallingConvention = CallingConvention.Cdecl  雖然我不知道為什么 不過我出現問題的重點是這里

 

CallingConvention

Cdecl:

StdCall:

我是使用后者才不出現警告的 ,曾想着 不讓出現警告 但是害怕如果后邊什么地方再有這樣的東西就麻煩了 。現在好了

這樣就解決了問題 ,記錄下來 以便后面什么時候忘記了 。

對了還有一個問題 就是C++dll包 ,通過DllImport引入之后呢 總是出現 Dll包不能用 ,那就要去查看Dll的依賴性了

用工具是DEPENDS.exe  只要上邊出現?的都是你系統環境沒有的dll包 ,所以需要你自己找到dll包並且放到system32下 ,然后注冊dll。這樣項目才不會出錯~。

 添加下載:DEPENDS.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM