問題描述: 使用VS2005在Windows Server 2003上編譯C++代碼, 輸出dll文件, 把該dll放到運行機器(與編譯機器的系統完全一致)上, 供C#代碼(web前台)調用, 提示無法加載dll.
分析:
1. 路徑完全沒有問題, dll放置在應用程序的啟動目錄.
2. 經過查閱資料發現, 有可能是該dll依賴於另一個dll, 而另一個dll不存在.
我使用MD選項(項目屬性->配置屬性->C/C++->代碼生成->運行時庫)編譯dll的, MD表示多線程動態鏈接(使用運行時庫). 使用Dependency Walker工具查看dll文件的依賴, 發現有兩個依賴找不到:MSVCR80.DLL和IESHIMS.DLL. 其中的第一個依賴MSVCR80.DLL是VC的運行時庫,
解決方案1: 如果在運行機器上安裝VS2005(或者把該依賴DLL復制過去), 該問題肯定可以解決. 更簡單的方法是第二個方案.
解決方案2: 使用靜態鏈接編譯dll, 將MD選項改為MT. 使用MT選項生成的dll文件大小更大, 使用Dependency Walker發現生成的dll不再依賴MSVCR80.DLL.