Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我不能在.NET中创建COM对象,但可以在JavaScript中创建_Javascript_.net_Com_Activex - Fatal编程技术网

为什么我不能在.NET中创建COM对象,但可以在JavaScript中创建

为什么我不能在.NET中创建COM对象,但可以在JavaScript中创建,javascript,.net,com,activex,Javascript,.net,Com,Activex,我可以在IE打开的JS html中创建ActiveX: 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. (Exceptio

我可以在IE打开的JS html中创建ActiveX:

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下打开它。它抱怨打开密钥时出错,系统无法找到指定的文件。然后我搜索next,regedit在HKCU\Software\Classes\TypeLib下找到它,并在那里成功打开

我还尝试通过Type.GetTypeFromCLSID创建一个对象,结果相同,返回null

这个COM有什么问题

另外,此COM是Lync Web App插件ReachAppShAx.AppSharing/{B89F72B4-7801-4F45-97AE-F9A0CDBB6213}


更新:所有这些事情都在本地发生:js/html在浏览器中作为html文件打开,.net是一个控制台应用程序。

使用Visual Studio完成此任务非常简单。说明适用于VisualStudio2005

打开工具箱视图->工具箱 右键单击工具箱->选择项 选择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

这将创建我的dll CwaAsVersionLib.dll,我将其添加到我的C项目中。然后将实例创建为:

var o = new CwaAsVersionLib.CwaAsVersionQuery();
但是!它仅在COM服务器正在运行时工作。如果正在运行,则创建实例失败,错误为:
类未注册HRESULT中的异常:0x80040154 REGDB_E_CLASSNOTREG。

您试图实例化的ActiveX对象是否安装在ASP.NET代码执行的服务器上?但我无法在.NET中创建其实例:您能澄清一下吗?您在哪里/如何运行.Net代码?正如Darin指出的,如果你使用ASP.Net,它的.Net部分在服务器上运行,而另一部分似乎在客户端使用IE中的JavaScript。不,不,都是本地的。浏览器中带有JS的Html将作为Html文件在本地打开。NET程序是一个控制台应用程序。请将其作为实际应用程序进行检查list@T.J.Crowder-实际上,我的公司阻止了图像,因此无法查看构成列表中不包含我的COM对象的内容的图像。尝试通过工具箱添加COM组件有什么意义?我在问题中写道,我不能添加对COM dll的引用。@Pranay:不涉及图像,你可以按降价方式进行。有关详细信息,请参阅我提供的链接。@Shrike-检查此链接