2011-04-14 94 views
0

我可以創建JS的ActiveX(HTML是由IE運行結束):爲什麼我不能在.NET創建COM對象,但在JavaScript

var o = new ActiveXObject("MyProgId"); 

但我不能在創建它的實例。 NET:

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

返回null。當我嘗試「對COM」在VS加我得到這樣的錯誤:

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

當我在註冊表中搜索MyTypeLib_CLSID我找到鑰匙,但HKCR\Wow6432Node\TypeLib下注冊表編輯器無法打開它。它抱怨Error Opening Key, The system cannot find the file specified。但後來我搜索下,註冊表找到HKCU\Software\Classes\TypeLib並在那裏成功打開。

我也嘗試通過Type.GetTypeFromCLSID創建一個對象,其結果相同(返回null)。

這個COM有什麼問題?

P.S.此COM是Lync Web App插件(「ReachAppShAx.AppSharing」/ {B89F72B4-7801-4F45-97AE-F9A0CDBB6213})

更新:所有這些事情都發生在本地:js/html正在瀏覽器中作爲html-文件,.net是一個控制檯應用程序。

+0

您嘗試實例化的ActiveX對象是否安裝在**服務器**上,這是ASP.NET代碼執行的地方? – 2011-04-14 07:36:54

+0

*「但我無法在.NET中創建它的實例:」*您能澄清一下嗎?你在哪裏/如何運行.Net代碼?正如Darin指出的那樣,如果您使用的是ASP.Net,那麼.Net的.Net部分會在服務器*上運行*,而您似乎在客戶端的IE中使用另一部分的JavaScript。 – 2011-04-14 07:41:37

+0

不,不是,都是本地的。在瀏覽器中使用JS的Html在本地打開(作爲html文件)。 .NET程序是一個控制檯應用程序。 – Shrike 2011-04-14 08:19:04

回答

0

使用Visual Studio實現此任務非常簡單。 (指導是針對Visual Studio 2005中)

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

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

現在你可以簡單地拖動你的COM組件,因爲CCW(COM Callable Wrapper)應該由Visual Studio自動創建。

+1

你可以[標記該列表](http://stackoverflow.com/editing-幫助)作爲實際列表 – 2011-04-14 07:40:11

+0

@TJ Crowder - 實際上圖像在我的公司被擋住了,所以無法看到合成圖像的圖像 – 2011-04-14 07:47:25

+0

@ T.J。克勞德:做到了! – Albireo 2011-04-14 07:52:08

0

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

所以現在的問題變成「如何處理進程外-COM在.NET/C#」。

我創建的包裝與tlbimp.exe是幫助:tlbimp.exe是CommunicatorWebAppVersion.exe

這造成我的DLL CwaAsVersionLib.dll我加入到我的C#項目。然後創建實例爲:

var o = new CwaAsVersionLib.CwaAsVersionQuery(); 

但是!它只適用於COM服務器正在運行。如果它正在運行,則創建實例失敗,並顯示錯誤: 未註冊的類(HRESULT的異常:0x80040154(REGDB_E_CLASSNOTREG))。

相關問題