gpt4 book ai didi

javascript - 如何使用可从 Javascript 调用的 ATL 和 VS2010 创建 C++ COM 对象(带有类工厂)

转载 作者:行者123 更新时间:2023-11-30 08:56:29 25 4
gpt4 key购买 nike

我需要创建一个可从 Javascript 调用的 COM 对象。有人告诉我要做到这一点,您需要一个 COM 对象,它也实现了一个类工厂,这里建议我尝试 ATL。有人向我指出了一个 Code Project ATL 示例,但是它不包括类工厂。

我可以用一个简单的对象构建一个小型 ATL 项目,但无法实例化它,这可能是因为我没有提供类工厂。

那么,有没有人有通过 ATL 在 VS2010 中构建可以从 Javascript 调用的简单 COM 对象的经验?

编辑:好吧,在阅读 DECLARE_CLASSFACTORY_EX 的文档时,听起来好像提供了默认类工厂。所以现在我不确定缺少什么。从 Javascript 实例化和调用类需要什么?

编辑:此外,为了澄清,我从中调用对象的 Javascript 位于 HTML 页面中,该页面显示在 MFC 对话框应用程序的 IE ActiveX 控件中。这就是 Javascript 运行的上下文。

最佳答案

首先,我认为您指的是用于 Internet Explorer 的特定于 MS 的 JScript,因为其他浏览器可能不支持 COM/ActiveX。

您不必显式实现类工厂,因为 ATL 框架已经提供了它。只需运行 ATL 向导: View --> 类 View ;在Class View 中右击project root --> Add --> Class --> ATL Simple Object;设置类名,其余的保留默认值。该向导将定义以下主要内容:

  1. IDL 文件中的接口(interface)和实现它的协同类。
  2. C++ 类,这将是上述共同类的实际实现。关注OBJECT_ENTRY_AUTO头文件中的宏:它“连接”您的类和 ATL 框架类工厂。
  3. *.rgs 文件,用于在 Windows 注册表中注册您的共同类(class)。

现在您可以向这个新创建的类添加一些方法 - 通过向导(右键单击类 --> 添加 --> 添加函数...),或手动。

此外,为了避免您的组件出现安全问题,您必须实现 IObjectSafety在你的类(class)中:只需从 public IObjectSafetyImpl<CYourClass, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA> 继承 C++ 类, 并添加 COM_INTERFACE_ENTRY(IObjectSafety)到界面图。

现在您的类可以在 JScript 中使用了。在脚本中,您可以使用 object 静态创建它标记,或动态使用 new ActiveX()陈述。如果您的对象有连接点(即触发事件)并且您不想太棘手,则必须使用前一种方法。

关于javascript - 如何使用可从 Javascript 调用的 ATL 和 VS2010 创建 C++ COM 对象(带有类工厂),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com