gpt4 book ai didi

c++ - 从 BHO ( C++ ) 向 CAxWindow 上的 JS 公开方法

转载 作者:行者123 更新时间:2023-11-28 07:23:19 25 4
gpt4 key购买 nike

我有这个 BHO,我使用这个线程成功地将方法暴露给 JS:Calling BHO method from Javascript? .

当我打开 CAxWindow 以托管 HTML 文档时,我想使用这个导出的方法,但它似乎也不适用于该窗口。

我尝试创建一个自定义类,例如:

class Bubble: 
public CAxWindow,
public IDispEventImpl<1, Bubble, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 0>
{
public:

BEGIN_SINK_MAP(Bubble)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE , OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE , OnDownloadComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, OnQuit)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, NavigateError)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2 , OnNavigateComplete2)
END_SINK_MAP()

尝试在文档完成时重复公开方法的过程,但似乎没有触发该事件。

所以基本上我的问题是:无论如何都可以在我的 CAxWindow 上向 js 公开方法吗?

非常感谢!

最佳答案

IDispEventImpl 实现接收器接口(interface)来处理事件方法调用。您不能直接使用自己的其他方法扩展它。此外,JavaScript 并没有真正从脚本代码中看到这个接口(interface),因为它连接到 ActiveX 控件站点,而不是脚本引擎。 IDispEventImplIDispatch COM 接口(interface)的简化实现,无引用计数器,适用于连接点接收器上的事件 IDispatch::Invoke 调用界面。

您需要使用 IDispatch 接口(interface)实现启用类型库的 COM 对象(脚本引擎使用类型库来发现实际方法),或者自定义 IDispatchIDispatchEx 接口(interface)实现(是的,这可以作为附加基类/接口(interface)直接在 CAxWindow 类上实现)处理方法名称解析而无需类型库。然后将此对象作为 external 传递给脚本引擎。对象或其他。

关于c++ - 从 BHO ( C++ ) 向 CAxWindow 上的 JS 公开方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106095/

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