我已经能够将webkit控件嵌入到windows(c ++)应用程序中,并注册了我的自定义对象以供访问javascript(使用JSGlobalContextRef,JSObjectMake等)。成功测试了从JavaScript到c ++层的调用,以获取返回string或int的简单方法。
现在我想公开一个内部使用COM库的自定义方法&最终返回一个IDispatch指针(包装为VARIANT或其他)。如何将IDispatch指针转换为JSValueRef,JSObjectRef或JavaScript(webkit内部)可以理解的任何其他内容?
在IE浏览器控件世界中,我可以通过“getExternal”(IDocHostUIHandler接口)简单地公开IDispatch,或者甚至将它包装在VARIANT中,并返回自定义“外部”对象内的任何其他API的Out-Param
答案 0 :(得分:0)
这个问题没有简单的n步答案。我通过Google搜索找到了解决类似问题的代码,即从SpiderMonkey访问COM对象的问题。我可以给你你可能采取的方法,我不再有链接的实际代码,无论如何它都是SpiderMonkey特有的。
您的Javascript引擎有一些方法可以使用您已经在使用的自定义对象来扩展它。您需要定义您正在实现的这个新方法返回另一种类型的自定义对象,并将IDispatch指针放在该自定义对象的自定义数据中。您的JS引擎不会“理解”或关心自定义对象是ActiveX对象的外观。您只需设置此类自定义对象,以便在调用其Frob方法时,您的Facade将调用委托给IDispatch上的Frob DISPID。
如果这个答案不清楚,请告诉我一个问题,即我们至少说同一种语言。