熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

c#中dllimport報錯

2022-06-13   來源: ASP編程 

  c#使用dllimport調用c++生成的dll庫文件報錯

  報錯信息為

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

  解決方法

  點擊C++項目屬性來到配置屬性下面的C/C++點擊高級在右邊的調用約定選擇 __stdcall (/Gz)

  以下是產生上述問題的原因(_stdcall與_cdecl兩者之間的區別)

  WINDOWS的函數調用時需要用到棧(STACK一種先入後出的存儲結構)當函數調用完成後棧需要清除這裡就是問題的關鍵如何清除??

  如果我們的函數使用了_cdecl那麼棧的清除工作是由調用者用COM的術語來講就是客戶來完成的這樣帶來了一個棘手的問題不同的編譯器產生棧的方式不盡相同那麼調用者能否正常的完成清除工作呢?答案是不能

  如果使用__stdcall上面的問題就解決了函數自己解決清除工作所以在跨(開發)平台的調用中我們都使用__stdcall(雖然有時是以WINAPI的樣子出現)


From:http://tw.wingwit.com/Article/program/ASP/201311/21878.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.