gpt4 book ai didi

delphi - 使用 IScriptControl 创建 JScript 对象

转载 作者:行者123 更新时间:2023-11-30 06:09:03 29 4
gpt4 key购买 nike

有没有比这更好的在 IScriptControl 中创建对象的方法?

Result := SC.Eval('new Date()');

我需要这样的东西:

function CreateJSObject(JSClassName: string; Params: PDispParams): OleVariant; 

一个简单的实现是

var 
S: string;
begin
S := '';
for I := P.cArgs - 1 downto 0 do
begin
if S <> '' then
S := S + ', ';
S := S + ConvertParamToJSSyntax(OleVariant(P.rgvarg[I]));
end;
Result := ScriptControl.Eval('new ' + JSClassName + '(' + S + ');');
end;

最佳答案

在 MSScriptControl 的 CodeObject 属性上查询 IDispachEx 接口(interface)。它是一个指向 JScript 全局状态的指针,它包含添加到其中的所有对象。然后对要创建的对象名称执行带有 DISPATCH_CONSTRUCT 参数的 InvokeEx。这相当于调用“new”。

这将创建一个正确类型的对象,您不必将它们转换为 javascript 类型。您也可以将 native 对象传递给构造函数。

我知道这适用于脚本中定义的构造函数。我不确定 Date 是 native 属性。

这适用于 JScript 和 VBScript activescripting 主机,但其他一些脚本主机不会在 CodeObject 上返回任何内容,因此这不是很便携。

关于delphi - 使用 IScriptControl 创建 JScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403801/

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