2012-04-02 16 views
1

TObject類型的變化腳本變量值I具有DWScript這樣的Delphi DWScript - 在scriptruntime

var Outputter: TOutputter; 

procedure OutputterTester; 
begin 
    Outputter.Print; 
end; 

TOutputter(僅用於一個複雜的類一個例子)被聲明和在Delphi代碼中創建並暴露於DWScript通過Rtti。

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 [「Outputter上」] ScriptObj.ExtObject TOutputter的任意實例(Delphi代碼創建)和腳本代碼訪問它們在Outputter上。但我想分配一個delphi代碼創建TOutputter的實例,而不需要init部分。

謝謝你的幫忙!

+0

什麼是TOutputter?一類?一個記錄?一個類型的別名?另外誰是負責創建腳本端對象,誰負責維護該腳本端對象背後的德爾福端的對象? (由「誰」我的意思是腳本?Delphi的代碼嗎?別的東西嗎?)我 – 2012-04-03 07:43:58

+0

有調整我的問題回答含糊事實。謝謝你的幫助! – DragonFlyOfGold 2012-04-03 09:36:13

回答

0

如果我理解正確的,你想跳過初始化過程,但如果這意味着你必須做出Outputter上無論是外部變量或一個神奇的名字,或者你將不能夠認識到它是可變的。

的一種方法上面可能只是前面加上你的鍋爐板代碼,用戶腳本:

var Outputter := TOutputter.Create;

另一種選擇是建立在TdwsUnit一個外部變量,然後您就負責當用戶訪問外部變量,並能處理,如果用戶指定的東西變量以及發生的事情創建一個從德爾福側腳本端對象。

但是,如果Outputter只能由用戶讀取,則可以在TdwsUnit中聲明Outputter()函數(並在那裏創建並返回腳本對象)。

最後一個選擇是使用RTTI環境,這取決於您想要對它做什麼,這可能是最簡單的選擇,因爲您可以直接更改環境中的實例(RTTI環境的單元測試之一那是)。