Page 1 of 1

Глобальные переменные в Stealth DLL

Posted: 15.05.2012 22:05
by Gauhar

Code: Select all

PROGRAM Test;
VAR
   TestArray: array of Integer;
   LenArray: Integer;

Procedure MyProc;
Var
   i: Integer;
Begin
   LenArray := LenArray + 1;
   AddToSystemJournal('==== LenArray = ' + IntToStr(LenArray) + ' ====');
   SetLength(TestArray,LenArray);
   TestArray[LenArray - 1] := LenArray;
   for i := 0 to Length(TestArray) - 1 do
      AddToSystemJournal('TestArray[' + IntToStr(i) + '] = ' + IntToStr(TestArray[i]));
End;

BEGIN
   while LenArray < 3 do MyProc;
END.
При запуске данного скрипта в Stealth Client'е операция
while LenArray < 3 do MyProc;
выполняется, и видно что переменные TestArray и LenArray меняют свои значения, но при загрузке скрипта в DLL эта операция не выполняется (наверно так и задумано). Далее в DLL несколько раз запускаю процедуру MyProc, которая, по идее, должна менять значения переменных TestArray и LenArray (я так понимаю они глабльны для данного скрпта и поэтому видны для всех процедур-функций данного скрипта), но этого не происходит.
Скорее всего, по этой же причине, в скриптах запущенных в DLL коммада Ignore() работает пока работает функция её вызывающая, как только функция отработала список игнора обнуляется.
Подскажите как сделать чтобы скрипты запущенные в DLL работали корректно?

Re: Глобальные переменные в Stealth DLL

Posted: 17.05.2012 14:09
by CFA
Сейчас каждый запуск процедуры через hotkey равноценен запуску скрипта, поэтому значение переменных между вызовами не сохраняется.
Я пока не занимаюсь этой частью стелса, поэтому ближайшее время ждать изменений не стоит.

Re: Глобальные переменные в Stealth DLL

Posted: 18.05.2012 0:03
by yuras
Gauhar wrote: Подскажите как сделать чтобы скрипты запущенные в DLL работали корректно?
Используй SetGlobal/GetGlobal

Re: Глобальные переменные в Stealth DLL

Posted: 18.05.2012 7:55
by Gauhar
Спасибо.