1

我已经注册了 TForm 类及其“标题”属性,然后我注册了一个全局变量:

NewGlobal := DwsUnit.Variables.Add;
NewGlobal.Name := 'MainForm';
NewGlobal.DataType := 'TForm';
NewGlobal.OnReadVar := GlobalReadProc;

GlobalReadProc 代码:

GlobalReadProc(Info: TProgramInfo;var Value: Variant);
begin
    TVarData(Value).VType := varUnknown;
    IUnknown(TVarData(Value).VUnknown) := TForm(Form1);
end;

在脚本中,我调用 MainForm variables 属性

MainForm.Caption := ''DWS Script in work'';

DWScript 显示异常:

不支持接口。

我究竟做错了什么?(我使用 IUnknown 是因为我在 VarCopySafe 过程中看到了这种类型转换,并且当 VType 不是 varUnknown 时出现异常)

4

1 回答 1

1

返回值应该是你的对象的脚本表示;一个IScriptObj

以下对我有用:

GlobalReadProc(ProgramInfo: TProgramInfo; var Value: Variant);
var
  Info: IInfo;
begin
  Info := ProgramInfo.ResultVars.GetConstructor('Create', Form1).Call;
  Value := Info.ScriptObj;
end;

我个人会使用实例或函数而不是全局变量。

于 2016-06-08T08:54:34.077 回答