Веб-скрипт Delphi: доступ к переменной после выполнения скрипта

#delphi #dwscript

#delphi #dwscript

Вопрос:

Представьте себе этот скрипт:

 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;
  

Я получаю сообщение об ошибке доступа к «s» из MyProc. Я предполагаю, что сборщик мусора DWS уже освободил список строк. Правильно ли это? Могу ли я что-то сделать, чтобы сохранить «s» в рабочем состоянии?

Ответ №1:

Эту переменную не следует очищать перед вызовом EndProgram.

Одна вещь, которая может объяснить вашу проблему, заключается в том, что ваш скрипт изначально не был скомпилирован без ошибок (проверьте Program.Msgs, тогда он должен содержать ошибки).

Комментарии:

1. FWIW ваш пример кода был добавлен дословно в модульные тесты.