2012-02-15 93 views
3

全部,混合32位和64位管理組件

我有一個運行在32位機器的.NET託管應用程序。 我很好,將它編譯爲64位並將其移植到64位機器上。 但是我依賴於一些第三方DLL是32位程序集。 我可以將64位和32位程序集一起在64位機器上執行嗎?

謝謝!

回答

4

若它們在同一進程中運行。

OS上的進程無法加載不同「比特級」的程序集。一旦選定,所有組件必須符合。通常,如果您嘗試將32位DLL加載到64位進程中,您將得到一個BadImageFormatException,反之亦然。

三個選項:

  1. 獲取問題的DLL(理想)的64位版本。
  2. 始終以32位的方式運行(通常是選定的路徑)。
  3. 在另一個進程中運行問題DLL並使用類似IPC的東西來跨進程邊界進行對話(極端,但我必須這樣做一次)。

在64位操作系統上運行32位操作系統本身並沒有什麼錯誤,不要陷入它認爲速度會變慢的陷阱。

0

從我自己的經驗來看,沒有。

我開發了一個系統,它依賴於我無法控制的32位iSeries COM庫。遇到問題,並通過編譯32位版本的應用程序來修復它們。

只需確保不是針對任何CPU,而是將Visual Studio設置爲編譯爲x86。

另外請注意,您生成的DLL和可執行文件的位置稍有不同。

例如

斌\ 86 \調試

代替

斌\調試

0

不要忘記,如果你運行32位它可能不會更慢,但你可能會用完內存。