2008-12-04 60 views
1

我有一個用C++編寫的需要由C#中的應用程序使用的DLL。它在Vista x86下工作良好,但在x64下無法加載。因此,我構建了一個x64版本的DLL,並檢測操作系統是x86還是x64,並使用適當的interop調用到相應的DLL。這在Vista x86下正常工作,但在Vista x64下,當它嘗試加載DLL時,出現「並排」錯誤。爲什麼它沒有加載它,以及可以採取什麼措施來糾正這個問題? (請讓我知道如果你需要更多的信息,我不知道什麼樣的信息是在故障排除這個問題相關。)無法在Vista中的C#應用​​程序中加載C++ DLL x64

回答

2

需要在客戶端計算機上安裝VC90 for x64的redist。就清單而言,我認爲你可以改變它來刪除processorArchitecture標籤。要麼這樣說,要麼讓它說「任何」。

3

一個最初的想法:你可以嘗試設置了「平臺目標」,在C#部分設置的項目改爲「x86」,看它是否能在Vista 64位機器上以32位兼容模式運行?有關的SxS錯誤

更多信息將是有益的 - 它可能會涉及到一些具體的未安裝運行時庫的版本(32位?)?

2

一些詳細信息,MadKeithV的答案:

在Windows x64時,一個進程可以啓動爲32位或64位進程。 64位進程只能加載64位dll,而32位進程只能加載32位dll。

如果您的.Net應用程序的平臺目標(例如在項目屬性中指定)設置爲「任何CPU」,則中間代碼將根據目標平臺編譯爲32位或64位代碼,即x64系統將生成64位代碼。

因此,代碼不能再加載一個32位的DLL。

如果您的代碼加載非託管程序集,則應始終明確指定目標平臺。

+0

你的文章中有一個小錯誤 - 32位進程只加載32位(不是64位)的DLL。但是感謝帖子,這很有用,我實際上並不知道背景,只知道修正。 – 2008-12-04 14:57:43

+0

謝謝,剛糾正錯誤! – 2008-12-04 15:09:43

0

並排錯誤的一邊是更多的則可能是由你造成的C++ DLL清單文件設置或者他們沒有得到嵌入或者你選擇了不嵌入清單,並使用32位版本的清單。

簡單的解決方案是將你的C#應用​​程序標記爲x86的杯子,並與32位DLL一起運行。

1

如果沒有別的工作..你可以給Process Monitor一個嘗試。 它顯示你找不到哪個文件(依賴項)。這可能會讓你繼續前進。

相關問題