2011-05-18 121 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