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 変数プロパティを呼び出します

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

DWScript は例外を示します:

インターフェイスはサポートされていません。

私は何を間違っていますか?(VarCopySafe プロシージャでその型キャストを見たので、IUnknown を使用します。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 に答える