C#平台互操作部署問題

來源:互聯網
上載者:User

程式中使用了平台互操作p/invoke在C#中調用MFC的DLL,在安裝有VS2008開發環境的系統中程式均可正常運行,但是複製到其它機器上就不行了,.NET FRAMEWARK也都是最新版本,不知道怎麼辦。

A.dll 是別人用VC6.0開發的,裡面匯出了一個類,沒有源碼。
B.dll 是對A.dll的一個封裝,VC++2008開發,將類的成員函數封裝成全域函數,並匯出。
C.dll 是對B.dll的一個封裝, C#開發,使用P/Invoke調用B.dll中的函數.
D.exe 是最終程式,引用了C.dll

後來用Depends.exe分析,發現最終Debug目錄中的B.dll使用了MSVCR90D.dll,奇怪的是這個檔案卻找不到,在安裝了VS的機器上,即使找不到也能運行.

查了一些資料有說MSVCR100.dll可能有一個BUG, 跟編譯模式也有關係, 於是使用RELEASE編譯, 問題解決,到處都能運行了.

繼續用Depends.exe分析,發現Release模式下的B.dll使用了MSVCR90.dll, 少了一個D結尾,應該是調試版本和正式版本之分. 此時才想到裝了VS的環境裡面有很多用於調試的DLL,而這些D結尾的DLL在安裝MS的VC++2008可分發包的時候是沒有包含的,因此導致了問題.

所以,一定不要圖省事,把DEBUG版本的拿出來給使用者用. 我知道很多人有都有這個習慣,壞習慣!!! 如果不早點客服,以後早晚會付出更大的代價來發現由此導致的問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.