簡體   English   中英

為什么我不能在.NET中創建COM對象,卻可以在JavaScript中創建COM對象

[英]Why I can't create COM object in .NET but can in JavaScript

我可以在JS中創建ActiveX(由IE打開html):

var o = new ActiveXObject("MyProgId");

但是我無法在.NET中創建其實例:

var t = Type.GetTypeFromProgId("MyProgId");

返回null。 當我嘗試在VS中添加“對COM的引用”時,出現以下錯誤:

"Could not add a reference to {MyTypeLib_CLSID}\1.0
Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))"

當我在注冊表中搜索MyTypeLib_CLSID我確實找到了密鑰,但是regedit無法在HKCR\\Wow6432Node\\TypeLib下打開它。 它提示Error Opening Key, The system cannot find the file specified 但是,我接下來搜索,regedit在HKCU\\Software\\Classes\\TypeLib下找到它,並在那里成功打開。

我還嘗試通過Type.GetTypeFromCLSID創建一個具有相同結果的對象(返回null)。

此COM可能有什么問題?

PS此COM是Lync Web App插件(“ ReachAppShAx.AppSharing” / {B89F72B4-7801-4F45-97AE-F9A0CDBB6213})

更新:所有這些事情都在本地發生:js / html在瀏覽器中以html文件形式打開,.net是一個控制台應用程序。

使用Visual Studio實現此任務非常簡單。 (說明適用於Visual Studio 2005)

  1. 打開工具箱(查看->工具箱)
  2. 右鍵單擊工具箱->選擇項目
  3. 選擇“ COM組件”選項卡。
  4. 選擇您感興趣的COM組件。

引用也會自動添加到項目中。

現在,您只需拖放COM組件,因為CCW(COM可調用包裝器)應由Visual Studio自動創建。

看來我明白為什么我不能在.net中為此COM創建CCW-這是因為此COM是進程外COM服務器。 因此,JavaScript / IE可以與進程外COM無縫配合,但不能與C#配合。

因此問題轉向“如何處理.NET / C#中的進程外COM”。

我已經在tlbimp.exe的幫助下創建了包裝器:tlbimp.exe CommunicatorWebAppVersion.exe

這將創建我添加到C#項目中的dll CwaAsVersionLib.dll。 然后將實例創建為:

var o = new CwaAsVersionLib.CwaAsVersionQuery();

但! 它僅在COM服務器正在運行時才起作用。 如果它正在運行,則創建實例失敗,並顯示以下錯誤:未注冊類(HRESULT的異常:0x80040154(REGDB_E_CLASSNOTREG))。

暫無
暫無

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

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