簡體   English   中英

為什么我不能通過COM訪問我的課程?

[英]Why can't I access my class through COM?

我有一個用C#.net編寫的類庫。 我想在64位Windows計算機上向COM注冊它,以便可以在腳本(javascript,vbscript等)中使用CreateObject()創建它的實例。 所以我創建了一個安裝項目。 我將安裝項目的目標平台設置為x64。 類庫項目的目標平台設置為AnyCPU。 我為安裝程序創建了一個自定義操作,該操作手動執行了驅動程序的注冊,它看起來像這樣...

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{           
   throw new InstallException("Failed To Register driver for COM Interop");
}

我可以在調試器運行時將其附加到該進程,並確定該注冊已成功完成。

由於某些原因,當我嘗試使用CreateObject()創建類的對象時,它給我一個錯誤,提示“無法創建名為...的對象”。 但是,如果我使用SysWOW64文件夾(32位文件夾)中的cscript.exe運行腳本,則對象創建成功,其余腳本運行正常。 因此,似乎該類已成功注冊了32位而不是64位,或者我的項目具有32位依賴關系,並且64位Cscript宿主進程由於該依賴關系而無法創建它。 我的類庫確實引用了我編寫的另一個項目,但它也被設置為可用於任何CPU。 因此,這對於32位和64位進程應該是不錯的選擇。

有誰對我應該如何追蹤這種32位依賴項有任何建議?

使用RegisterAssembly() 非常不尋常。 此處可能出錯的一件事是安裝程序以32位模式運行。 這會使RegisterAssembly()在錯誤的注冊表部分中注冊COM服務器。

無需執行此操作,只需在安裝項目中將文件的Register屬性設置為COM。

暫無
暫無

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

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