从DWScript脚本中调用Delphi端公开的对象实例的方法。该方法需要传入一组枚举数据类型之一的参数。这个枚举数据类型是从Delphi暴露给脚本的。
在编译脚本时,我看到错误消息显示DWScript将此类参数传递为整数数组,而Delphi端接收到变体数组(TData)。
我不得不在Delphi端编写一个包装器,通过循环遍历该数组并重新构建相应的集合变量,以便将其传递给实际的Delphi函数。访问数组使用"ProgramInfo.Vars['MsgFlags'].GetData"。
这种方法完全可行,但我是否做对了?我有没有遗漏什么?
脚本端代码:
在编译脚本时,我看到错误消息显示DWScript将此类参数传递为整数数组,而Delphi端接收到变体数组(TData)。
我不得不在Delphi端编写一个包装器,通过循环遍历该数组并重新构建相应的集合变量,以便将其传递给实际的Delphi函数。访问数组使用"ProgramInfo.Vars['MsgFlags'].GetData"。
这种方法完全可行,但我是否做对了?我有没有遗漏什么?
脚本端代码:
procedure Test;
begin
DelphiObject.Demo('Hello', [mffStop, mffClose]);
end;
Delphi端代码:
TFlag = (mmfStop, mffStart, mmfClose);
TFlags = set of TFlag;
// Internal method doing the actual job
procedure TDelphiObject.DemoInternal(
const MsgText : String;
const MsgFlags : TFlags);
begin
// Some code...
end;
// Wrapper method exposed to script
procedure TDelphiObject.Demo(
const MsgText : String;
const MsgFlags : array of integer);
var
Flags : TFlags;
I : Integer;
begin
Flags := [];
for I := Low(MsgFlags) to High(MsgFlags) do
Flags := Flags + [TFlag(MsgFlags[I])];
DemoInternal(MsgText, Flags);
end;