gpt4 book ai didi

c++ - DISPID_VALUE 对于从脚本调用 IDispatch 是否可靠?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:25 26 4
gpt4 key购买 nike

继续 this question ,我很困惑 IDispatch::Invoke() 上的 DISPID_VALUE 是否可以将脚本函数和属性(在我的例子中是 JavaScript)视为调用实际函数的标准和可靠由 IDispatch?
表示如果是,是否在 MSDN 中的任何地方提到过?

请注意,问题是关于这种行为是否可以预期,而不是我无法提前知道的一些接口(interface)可能是什么样子。

一个简单的用例是:

// usage in JavaScript
myObject.attachEvent("TestEvent", function() { alert("rhubarb"); });

// handler in ActiveX, MyObject::attachEvent(), C++
incomingDispatch->Invoke(DISPID_VALUE, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, par, res, ex, err);

编辑:试图澄清这个问题。

最佳答案

如果脚本一致地定义它,那么从脚本调用对象应该是可靠的。这应该是 MSHTML 中的 JScript/Javascript 的情况,但不幸的是,关于这个主题的文档真的很少,我手头没有任何可靠的证据。

以我自己的经验,传递给 attachEvent() 的 Javascript 函数应该始终保持一致——接收到的“函数”对象只能有一个与自身匹配的可调用方法。因此,默认方法是您唯一可以找到的方法,DISPID 为 0。Javascript 函数通常没有成员函数,尽管我确信有一种方法可以做到这一点。如果它确实有成员函数,你会看到它们就像对象的成员函数一样。根据 expando 函数的规则,JScript 中的成员函数将始终与 IDispatchEx 保持一致,因为添加到对象的任何函数都算作 expandos。

IDispatchEx interface @ MSDN

关于c++ - DISPID_VALUE 对于从脚本调用 IDispatch 是否可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681327/

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