Итак, что-то давно сюда не писал... Но сегодня я принес поганую весть: Windows 2000 SP4 менят значения ebx, esi, edi (и еще чуть ли не все регистры fpu). Фанaты xor ebx, ebx в начале проги и push ebx вместо push 0 - обломитесь (( Написал я давно прогу, которая получает значение всех "ячеек" контрола ListView. Оказалось, что она не работает у одного человека, которого я и обучил пользоваться отладчиком, сказал сделать скриншот. Неверующим выкладываю прогу, ее исходник, и скрин чувака. Добавлю, что ebx, edi и esi, менялись много-много раз в программе. -- Added -- Мда, может я дурак, но файл у меня не загрузился, точнее загрузился, но этого не видно. http://y2k6.narod.ru/ListViewReport.tar.bz2 <- Брать здесь
Угу, я знаю. В том то и вся фишка, что в 2000 бред такой. Ты на скрине посмотри - там аж все регистры сопроцессора красные (опять же не только в этом месте).
Хм.. Сорец не смотрел, много весит. Не только в начале проги, а и в любых функциях обратного вызова (callback), коими являются WindowsProc, ThreadProc и т.п. Это не открытие, а факт.
Тоже была такая проблема давненько - низя передавать значения в регистрах в callback'и ибо выньдос сама их юзает до вызова оных калбэков. Выяснил это для себя раз и на всегда. Код (Text): xor ebx, ebx делаешь прямо в callback'е и всё хорошо...
более того, если в WindowsProc (под Win2k SP4) менять ebx и не восстанавливать до выхода, то прога может упасть. при этом в Win9x и WinXP всё ок
Jupiter Чтобы не учиться танцам с бубном, следуй документации - то есть, сохраняй и восстанавливай всегда.
В 9x в оконной процедуре нельзя менять esi, ибо вызов оконной процедуры выглядит примерно так: Код (Text): mov esi,esp ... call ... ... mov esp,esi