1

私の Delphi (2010) コードには、次の方法で DWScript に公開したクラス TImageItem があります。

dwsUnit.ExposeRTTI(TypeInfo(TImageItem),[eoNoFreeOnCleanup, eoExposePublic]);

dwsUnit で、Delphi 側から TImageItem を取得する関数を宣言しました。

function GetImage: TImageItem;

Delphi側では:

procedure TFScript.dwsUnitFunctionsGetImageEval(info: TProgramInfo);
begin
    ...
    // (Item is a TImageItem and not nil)
    Info.ResultAsVariant := TdwsRTTIVariant.FromObject(Item);
end;

ただし、次のように始まるスクリプトを実行すると:

var Item: TImageItem;
Item := GetImage;
...

GetImage の呼び出し中に、「オブジェクトは既に破棄されています」というメッセージとともに EScriptError が発生します。

私は何を間違っていますか?オブジェクトを公開したり、間違って返したりしていますか?

4

1 に答える 1

1

ExposeRTTI使ったことがないのでわかりませんが、以下のようにします。

procedure TFScript.dwsUnitFunctionsGetImageEval(info: TProgramInfo);
begin
  ...
  // (Item is a TImageItem and not nil)
  Info.ResultAsVariant := Info.Vars[Info.ResultVars.TypeSym.Name].GetConstructor('Create', Item).Call.Value;
end;
于 2015-11-14T19:25:57.133 に答える