为什么我不能在.NET中创建COM对象,却可以在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无法在ѭ4it下打开它。它抱怨
Error Opening Key, The system cannot find the file specified
。但是我接下来搜索,regedit在edit6ѭ下找到它并在那里成功打开。 我也尝试通过
Type.GetTypeFromCLSID
创建一个对象,结果相同(返回null)。 这个COM有什么问题? 附言此COM是Lync Web App插件(\“ ReachAppShAx.AppSharing \” / {B89F72B4-7801-4F45-97AE-F9A0CDBB6213}) 更新:所有这些事情都在本地发生:js / html在浏览器中以html文件形式打开,.net是一个控制台应用程序。     
已邀请:
使用Visual Studio实现此任务非常简单。 (说明适用于Visual Studio 2005) 打开工具箱(查看->工具箱) 右键单击工具箱->选择项目 选择“ COM组件”标签。 选择您感兴趣的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))。     

要回复问题请先登录注册