我有一个托管 Active Script JScript 引擎的应用程序。根据 jscript.dll 的版本,它运行到 JScript 5.8。该应用程序向 JScript 环境公开了许多对象和方法。
当脚本调用某个函数时,IDL是这样的:
HRESULT func(VARIANT varInput);
我想确定输入是否是 instanceof
另一个函数(即,该函数是否是原型(prototype)在输入原型(prototype)链中的构造函数)。在 JScript 中:
输入instanceof错误
如何在 C++ 中使用 IDispatch/IDispatchEx 完成此操作?
该方法可以访问 IActiveScript(由 JScript 引擎实现)和 IActiveScriptSite(由主机实现)接口(interface),因此可以使用 IActiveScript::GetScriptDispatch 获取全局对象,任何其他构造函数(例如错误
) 可以检索。
最佳答案
您包装到变体中的 IDispatch*
有一个 DISPID_VALUE
(= 0
) 属性,在 Error< 的情况下
object 会给你一个字符串值“[object Error]”。
您还可以定义或注入(inject) JScript 函数,例如:
function IsInstanceOf(object, type) {
return object instanceof type;
}
function IsInstanceOfError(object) {
return IsInstanceOf(object, Error);
}
并使用 IDispatch*
从您的 C++ 代码中回调它们,您已经持有让 JScript 引擎针对特定类型检查它并返回此类检查的真/假结果。
关于javascript - 在 C++ 的 JScript 中调用 instanceof 运算符 (IDispatch/IDispatchEx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333562/