>想象一下这个脚本:
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的垃圾收集器已经释放了字符串列表。这是对的吗?我可以做点什么来保持"s"活着吗?
在
调用 EndProgram 之前,不应清理该变量。
可以解释您的问题的一件事是,如果您的脚本一开始就没有编译而没有错误(检查 Program.Msgs,然后它应该包含错误)。