Может ли переменная цикла for портиться от Enumwindows и Enumwindowschild? Я тут поседею с ней скоро. Цикл такой:
var mainh:hwnd;
function Enum(h: hwnd): bool; stdcall;
begin
//определяется mainh
result:=true;
end;
function enumch(h:hwnd):bool;stdcall;
begin
...
result:=true;
end;
function okn(p:pointer):dword; stdcall;
var i:byte;
begin
for i:=1 to uscount do begin //uscount=2
showmessage(inttostr(i)+' '+inttostr(uscount));
...//тут некоторые нехитрые действия, переменная точно не трогается
mainh:=0;
sleep(1000);
enumwindows(@enum,0); //корень зла №1
if mainh>0 then enumchildwindows(mainh, @enumch,0); //№2
end;
end;
, действие происходит в доп. потоке, но и в основном потоке то же самое. Если запускать как сейчас, то showmessage дважды выведет 1 2, на Enumchildwindow будет AV, даже без захода в callback. Пробовал закомментировать Enum-ы - переменная цикла нормально увеличивается. В callback-функциях работы с памятью не производятся. Что это может быть? Второй день уже с этой магией борюсь.. Что интересно, если убрать цикл а просто впереди поставить i:=1, то все замечательно отрабатывает.
Надеюсь, по традиции после создания темы на форуме все неожиданно разрешится само собой)
//редактировал