javascript - 在 C++ 的 JScript 中调用 instanceof 运算符 (IDispatch/IDispatchEx)

标签 javascript c++ com jscript idispatch

我有一个托管 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/

相关文章:

javascript - 使用 .sort((a,b) => a>b) 对数组进行排序是有效的。为什么?

javascript - 在 Spring Boot 中将 Angular 环境变量传递给编译的静态 Angular 文件

C++定义虚基类重载运算符

c# - 添加属性后如何为 .NET 程序集保留 COM 二进制兼容性?

c# - COM 协同对象和接口(interface) C#

Javascript 什么更快? IF 语句中的多个 OR 以 objective-c ss,或一个 IF 具有多个 css 目标

javascript - S3 从浏览器上传带有预签名 url 的图像

c++ - 设置非常简单的 C/C++ 链接问题

c++ - 带有大量 SC_THREAD 的 Accellera SystemC 错误

delphi - 有没有办法从流加载 Crystal Report 9.0 文件?