簡體   English   中英

64位COM dll和C#/。Net應用程序之間的免注冊互操作

[英]Registration-free Interop between a 64-bit COM dll and a C#/.Net application

我正在嘗試在64位COM dll和C#應用程序之間進行免注冊COM互操作。

在我的上一個問題的答案中 ,我得到了幫助,可以使我成功地在64位COM dll上為C#調用HelloWorld方法。

但是,這只能通過使用regsrv32.exe在全球范圍內注冊COM dll來實現。

基於對相關問題的回答,我認為我需要將COM dll的引用上的Isolated標志設置為true。 但是,這導致以下構建錯誤:

Problem isolating COM reference 'ComLibInteropLib': 
    No registered classes were detected for this component.

MSDN social上一個問題的答案似乎表明,如果可以編譯32位版本的dll,則可以解決此問題。

但是,我的COM互操作庫需要鏈接到“普通” C ++ dll,我沒有該源,因此只能作為x64使用。

所以我的問題是:如何在64位COM dll和C#應用程序之間啟用隔離標志(或以其他方式並排工作)?

我很高興在我的計算機或其他開發人員的計算機上使用regsrv32.exe,但是我們無法在必須運行最終應用程序的生產計算機上注冊任何COM dll。

這是您原來遇到的問題(COM服務器未正確注冊)的副作用。 當您將“ Isolated選項設置為true時,構建系統將為您自動生成所需的清單條目。 但是清單的內容需要來自某個地方 ,它使用注冊表項。 由於它們不存在,因此無法生成清單。

您可以自己編寫清單,但需要對清單的外觀有足夠的了解。 由於犯錯的幾率很高,因此咒語相當晦澀。 因此避免這種情況,您只需要注冊COM服務器即可獲得成功。 只需在您的構建計算機上,它就不必在客戶端計算機上注冊,因為它將使用清單。

您提到了64位COM服務器,這是另一種可能的故障模式。 構建系統仍為32位,因此您看到錯誤的鍵的幾率很高。 HKLM \\ Software \\ Wow6432Node而不是HKLM \\ Software。 通過構建兩種COM服務器來解決該問題。 當您自己使用Regsvr32.exe時要注意同樣的問題,其中有兩個。 c:\\ windows \\ syswow64中的一個應用於注冊服務器的32位版本,c:\\ windows \\ system32中的一個用於注冊64位版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM