2012-04-02 7 views
1

で型TObjectの変更スクリプト変数値IがこのデルファイDWScript - scriptruntime

var Outputter: TOutputter; 

procedure OutputterTester; 
begin 
    Outputter.Print; 
end; 

TOutputterようDWScriptを有するが宣言され、Delphiコードで作成さにさらされる(複雑なクラスの一例に過ぎません) Rtti経由のDWScript。

TOutputter = class 
    procedure Print; 
end; 

私はいくつかのインスタンスに対してコンパイルされたスクリプトを使用したいが、現在のインスタンスにリンクされているOutputter値を変更したい。 は、私は私がしてスクリプト変数にアクセスすることができます知っている:

var Exec : IdwsProgramExecution; 
... 
AVar := Exec.Info.Vars['Outputter'].Value; 

しかし、値はので、私は、オブジェクトをassigneすることはできませんバリアントです。どのように値を変更できますか? 。私が最初のようなスクリプトでクラスを作成する場合:

procedure Init; 
    Outputter := TOutputter.Create; 
end; 
私はExec.Info.Vars [「出力器」] ScriptObj.ExtObject(Delphiコードで作成された)TOutputterの任意のインスタンスを割り当てることができ

とscriptcodeでそれらにアクセスアウトプッターオーバー。しかし私はinitパートなしでTOutputterのインスタンスを作成したデルファイコードを割り当てたい。

は助けてくれてありがとう!

+0

TOutputterとは何ですか?クラス?レコード?型へのエイリアス?また、スクリプト側オブジェクトの作成責任者は誰ですか?また、そのスクリプト側オブジェクトの背後にあるDelphi側オブジェクトの管理責任者は誰ですか? (「誰が私のスクリプトを意味するの?デルファイのコード?別のもの?) –

+0

私は不明確な事実に答えるために私の質問を調整しました。ご協力ありがとうございます! – DragonFlyOfGold

答えて

0

私が正しく理解していれば、Initプロシージャをスキップしますが、それはOutputterを外部変数またはマジック名にする必要がある場合、それがどの変数であるかを認識できないことを意味します。上記のため

一つのアプローチは、単にユーザースクリプトにあなたのボイラープレートコードを付加することができます

var Outputter := TOutputter.Create;

別のオプションは、TdwsUnitで外部変数を作成することです、あなたはそれからになるだろうユーザーがその外部変数にアクセスするときにDelphi側からスクリプト側オブジェクトを作成する責任があり、ユーザーが変数に何かを割り当てても何が起こるかを処理できます。

しかし、Outputterがユーザーによって読み取り専用になっている場合は、TdwsUnitでOutputter()関数を宣言して(そこでスクリプトオブジェクトを作成して返す)ことができます。

最後のオプションは、環境でインスタンスを直接変更することができるため、RTTI環境を使用することです(RTTI環境の単体テストの1つそれをする)。