Dot-Net

從 x64 .NET 訪問 x86 COM

  • December 11, 2008

我有一個 x64 伺服器,因為我的庫被編譯為 AnyCPU,所以在 x64 下執行。我們需要訪問在 x86 下註冊的 COM 組件。我對 COM 知之甚少,我的Google搜尋讓我無處可去。

問題:我可以為 COM 組件使用從 x64 回到 x86 的符號註冊錶鍊接嗎?我是否也需要在 x64 下註冊 COM 組件?我可以(這裡有任何聲明……)嗎?

謝謝。

如果一個組件正在執行 x64-native,它不能在程序中載入 32 位 COM 伺服器,因為它是錯誤的程序類型。有幾種可能的解決方案:

  1. 如果可以的話,建構一個 64 位版本的 COM 程式碼(它當然會在 64 位系統資料庫中註冊自己)。這是最乾淨的解決方案,但如果您沒有 COM 伺服器的程式碼,則可能無法實現。
  2. 將 .NET 組件作為 32 位 x86 而不是 x64 執行。我假設你已經考慮過並出於某種原因拒絕了這個。
  3. 使用COM 代理DLLhost.exe 在程序外託管 COM 組件。這將使對 COM 伺服器的呼叫慢得多(它們現在將是程序間 Windows 消息而不是本機函式呼叫),但在其他方面是透明的(您不必做任何特別的事情)。

如果伺服器需要自定義代理存根而不是使用普通的 oleaut32 代理存根(雖然非常罕見),這可能不是一個選項,因為不會有 64 位版本的代理可用。只要它可以使用普通的 OLE 編組,您就可以將其註冊為代理啟動

引用自:https://stackoverflow.com/questions/359331