程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#平台互操作部署問題

C#平台互操作部署問題

編輯:C#入門知識

程序中使用了平台互操作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版本的拿出來給用戶用. 我知道很多人有都有這個習慣,壞習慣!!! 如果不早點客服,以後早晚會付出更大的代價來發現由此導致的問題。

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved