如何使用JavaScript使用COM对象?

时间:2010-07-12 21:01:01

标签: javascript com

我开始讨论这个问题: 我使用C#创建COM对象,注册它并使用PowerShell设法使用它。 当我试图用JavaScript做同样的事情它失败了,但是javascript不断抛出对象null错误。

您对如何解决此问题有任何建议吗?或者你的JavaScript不支持COM(如果是这样,我在哪里可以阅读更多关于它)???

非常感谢!

3 个答案:

答案 0 :(得分:2)

使用Shanti Rao的JSDB shell。它基于Firefox中使用的核心Spidermonkey引擎(Mozilla的Javascript实现),但对数据库和数据库有一堆绑定。 ActiveX个对象等。它有一些限制,但除非你使用复杂的东西,否则你应该能够使用它。

示例:

x=new ActiveX('MSXML2.DOMDocument.6.0');
x.async = false;
// I forget how to use IXMLDOMDocument but other calls go here

答案 1 :(得分:1)

Javascript确实不支持COM。一个选项是将JScript和ActiveX包装器用于COM对象。此外,它只能在Internet Explorer中使用。

Instantiating a COM class
Calling functions of a COM object in JScript
Other JScript/COM tutorials, including script callbacks

答案 2 :(得分:0)

我知道这有点晚了,但是对于其他发现此问题的人来说,可以轻松完成。假设您要在Windows上运行,因为您正在寻找Windows / JavaScript的互操作性。

最重要的问题是“您使用的是哪种JavaScript引擎?”因为此功能由该引擎决定。自1995年以来,Windows就一直支持最初称为OLE Automation或有时仅称为COM的系统标准脚本模型。除了基于版本8的IE(我认为最多为11)之外,基于Windows的脚本引擎(例如内置于Windows脚本宿主中的JavaScript和VBScript引擎)也使用此引擎。但是,IE容器实施了安全限制,从而阻止了我的某些工作。 m从工作中描述。像node.js这样的开源JavaScript引擎通常不使用COM,因为这是Windows的特定功能,因此无法执行我正在描述的事情。

鉴于此,要完成您想要的,您必须: 1.实现可编写脚本的COM对象。 2.注册该对象(在构建过程中通常是自动的)。 3.在JavaScript中,如上所述,使用新的ActiveX对象创建该对象的实例。

您可以用C#和C ++编写对象。在这两种情况下,都需要将对象基于IDispatch。 C#将使整个过程变得相当容易。本质上,您可以使用guidgen为界面和组件生成一些唯一的GUID,然后在C#中使用一些COM特定的属性来提供这些GUID。这是一个简单示例的链接(忽略“事件”内容): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/example-com-class

要知道的最重要的事情是,您将限制可以用作参数或返回给调用方的数据类型。像字符串和整数这样的东西都没问题。对于其他人,您可以使用C#描述它们并将它们从C#发送到JavaScript,但是另一种方法行不通。