IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Портится переменная цикла
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Может ли переменная цикла 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, то все замечательно отрабатывает.

Надеюсь, по традиции после создания темы на форуме все неожиданно разрешится само собой)

//редактировал

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Что это может быть?
Для начала
1) исправь сигнатуры функций на правильные (EnumWindowsProc должна получать 2 параметра, а не один)
2) отмени оптимизацию

Если картина не изменится - то придется выкладывать минимальный код, воспроизводящий проблему. У меня не получилось ее воспроизвести.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Н-дааа... после изменения сигнатуры картина изменилась кардинально, все сразу заработало, и даже как надо) Спасибо, я уж на злые антиотладочные трюки некоторых программ грешил)) Больше не буду вбивать в гугле EnumWindows пример smile.gif

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.05.2024 15:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name