2011-05-18 119 views
2

想象一下這個腳本:德爾福網頁腳本:訪問變量執行腳本後

var s = TStrings.Create; 
s.Add('Line 1'); 
s.Add('Line 2'); 

procedure MyProc; 
begin 
    if s.count = 2 then 
    // ... 
end; 

腳本運行時它創建變量「s」。現在我想在腳本完成後調用「MyProc」:

... 
Exec := Program.CreateNewExecution; 
Exec.BeginProgram; 
Exec.RunProgram(0); 
if Exec.ProgramState in [psRunning, psRunningStopped] then 
begin 
    Func := Exec.Info.Func['MyProc']; 
    Func.Call([]); 
    Exec.EndProgram; 
end; 

我從MyProc獲取訪問「s」的錯誤。我認爲DWS的垃圾收集器已經釋放了的StringList。這是正確的嗎?我能做些什麼來保持「S」活着嗎?

回答

2

該變量不應該調用EndProgram之前被清理。

有一兩件事可以解釋你的問題是,如果你的腳本並沒有在第一時間錯誤編譯(檢查Program.Msgs,應該再包含錯誤)。

+1

FWIW示例代碼已經添加到逐字的單元測試。 – 2011-05-31 06:25:12