[英]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)
引用也會自動添加到項目中。
現在,您只需拖放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.