1

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

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

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

4

1 回答 1

0

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

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

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

于 2012-08-17T20:51:14.873 回答