我有一個第三方COM對象(32位),我需要從我的C#應用程序(64位)調用。 我知道我必須在單獨的進程中運行COM對象。 這個COM對象有許多實現的類,所以我試圖避免編寫我自己的公開所有方法的遠程包裝器。 COM +似乎是最直接的解決方案。我打開組件服務菜單,創建一個新的COM +應用程序,將我的COM對象作爲組件添加到此應用程序中。一切都似乎進口美麗。調用32位COM從C#運行在64位模式
以我C#應用程序,我添加原COM對象爲基準(自動生成類型庫)。使用類型庫引用,我可以從COM +組件創建對象(我看到它們開始在組件服務窗口中旋轉),但是當我嘗試訪問對象的方法時,出現錯誤,說明接口未註冊。
有沒有人有線索?我回去並在COM對象上運行了regsvr32,但我認爲這不是必要的,也沒有幫助。 我在C#中的用法是否正確?看到這些方法,VS2008自動完成沒有任何問題。
確切的例外是: 「接口未註冊(從HRESULT異常:0x80040155)」
不清楚究竟有哪些權限和角色有關的組件服務,我嘗試了COM +對象標識設置到在系統帳戶下運行,作爲本地服務和交互式用戶。我已將角色添加爲角色中的用戶。 一切都在本地運行,所以不應該有文件權限或類似的問題。
我也想重申,此COM對象包含很多類。我成功地在客戶端實例化了一個類對象並設置了一些屬性值。 我還成功實例化另一個類的對象,但收到試圖調用這個第二對象的方法時,此異常....所以我不認爲有是哪一本登記冊我的COM對象在註冊的問題。
COM +非常依賴於權限等。也許這是怎麼回事...... – Yahia
Windows有效地擁有兩個不同的註冊表,一個用於32位,一個用於64位。我相信這個接口是在一個接口中註冊的,然後在另一個接口中進行註冊。 – GSerg
GSerg是正確的。如果註冊它的應用程序是32位,在64位系統上運行,則所有註冊表項都會在鏡像的WOW6432節點中結束,而不是在通常的情況下運行。 –