gpt4 book ai didi

javascript - Active X 控件自定义事件无法在 Javascript 中触发

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:33 25 4
gpt4 key购买 nike

我已经使用 IDispatch 接口(interface)编写了一个自定义的事件 X 控件,我想与 javascript 进行通信。我已经成功地使 javascript -> COM 路径正常工作;我可以在我的事件 x 对象上调用一个 javascript 函数,并在我的 dll 中接收相应的 INVOKE 调用。

要在 javascript 端接收事件,我遵循本文中的建议:http://jeffcode.blogspot.com/2008/02/how-to-create-activex-control-that.html

当我加载我的测试页面时,我收到了对 FindConnectionPoint 的调用,然后是对 Advise 的调用,正如我所期望的那样。当我在Advise给的接口(interface)上调用Invoke时,我得到了一个成功状态信息,但是在js端没有任何反应!

这是我用来测试事件处理的 javascript 代码:

function FooActiveX::ReceiveMessage(msg)
{
alert(msg);
}

有趣的是,如果我删除它,我就不会再收到对 FindConnectionPoint 或 Advise 的调用,所以它正在做一些事情。

任何有关如何调试此问题或要尝试的事情的建议都会非常有帮助。谢谢!

我的 idl 接口(interface)定义文件如下所示:

[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb7"),
version(1.0),
]
library FooControlLib
{
interface IFooControl;
dispinterface DFooControlEvents;

importlib("stdole2.tlb");

[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb8"),
hidden
]
dispinterface DFooControlEvents
{
properties:
methods:
[id(DISPID_RECEIVEMESSAGE)] void ReceiveMessage( [in] BSTR msg );
}

[
odl,
dual,
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb9"),
oleautomation
]
interface IFooControl : IDispatch
{
[id(DISPID_SENDMESSAGE)] HRESULT SendMessage( [in] BSTR msg);
}

[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fc0")
]
coclass FooControl
{
[default] interface IFooControl;
[source, default] dispinterface DFooControlEvents;
}
}

编辑:看来问题与 ReceiveMessage 方法中的参数有关。如果我删除“msg”参数,警告框将正确显示。

最佳答案

找到我的问题。该方法的参数作为 VARIANTARG 结构数组传递给 Invoke。我已经设置了值,但没有设置该结构的 vt 成员,它标识参数的类型。我不知道为什么调用返回 OK 状态。

关于javascript - Active X 控件自定义事件无法在 Javascript 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25614174/

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