如何在 webkit 浏览器控件中返回指向 JavaScript 的 IDispatch 指针



我已经能够将webkit控件嵌入到Windows(c ++)应用程序中,并为javascript注册了我的自定义对象以供javascript访问(使用JSGlobalContextRef,JSObjectMake等)。成功测试了从 JavaScript 到 c++ 层的调用,用于返回字符串或 int 的简单方法。

现在我想公开一个自定义方法,该方法将在内部使用 COM 库并最终返回一个 IDispatch 指针(包装为 VARIANT 或其他方式)。如何将 IDispatch 指针转换为 JSValueRef、JSObjectRef 或任何其他 JavaScript(在 webkit 中)可以理解的东西?

在IE浏览器控件世界中,我可以简单地通过"getExternal"(IDocHostUIHandler接口)公开IDispatch,甚至可以将其包装在VARIANT 中,并在自定义"外部"对象中返回任何其他API的Out-Param。

这个问题没有一个简单的n步答案。我通过谷歌搜索找到了解决类似问题的代码,即从SpiderMonkey访问COM对象。我可以给你可能采取的方法,我不再有链接的实际代码,无论如何它都是特定于蜘蛛猴的。

你的Javascript引擎有一些方法可以用自定义对象来扩展它,你显然已经在使用它们了。您需要定义要实现的这个新方法返回另一种类型的自定义对象,并将 IDispatch 指针放在该自定义对象的自定义数据中。您的 JS 引擎不会"理解"或关心自定义对象是 ActiveX 对象的外观。您只需设置这种类型的自定义对象,以便在调用其 Frob 方法时,您的外观将调用委托给 IDispatch 上的 Frob DISPID。

如果这个答案不清楚,请给我一个线索,我们至少说同一种语言。

最新更新