· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› ATOM & CreateWindowEx

Посл.отвђт Сообщенiе


Дата: Окт 16, 2003 03:37:27

Попытался передать ATOM который вернула функция RegisterClass в качестве имени класса в функцию CreateWindowEx. В 2000 это нормально сработало, а в XP вылезло сообщение о недопустимой операции. Ошибка возникла где-то в недрах DLL-ки. Когда я запустил программу из под отладчика, ошибка не появилась. Кто-нибудь может объяснить столь странное явление?

PS: Что-то баги нынче отладчиков стали бояться ... и как их таких ловить?


Дата: Окт 16, 2003 03:46:49 · Поправил: Quantum

Атом - 16-битное значение. Может, стоит обнулить высшие 16 бит на всякий случай?


Дата: Окт 16, 2003 12:51:58

Black_mirror: какой отладчик?
1) попробуй в windbg
2) у тебя скорее всего многопоточное приложение - а посему программа выполняется "несколько по-другому" -из-за того, что один из потоков дико тормозит.
3) попробуй windbg и в окне с мессагами посмотри на наличие эксепшенов.
4) кинь сюда код - посмотрим где косяк. Но не может быть, чтоб вот так вот просто гуя валилась.


Дата: Окт 16, 2003 18:58:59

Black_mirror
Quantum правильно говорит - обязательно обнуляй верхнее слово атома под XP, сам недавно на эти грабли напоролся :)


Дата: Окт 16, 2003 23:33:12

Всем спасибо!
Похоже дело действительно в том, что нужно обнулять старшее слово.

rst
Вчера это был просто каркас приложения.
Вызывались только RegisterClass,CreateWindowEx.
Плюс цикл обработки сообщений: GetMessage,TranslateMessage,DispatchMessage.
Функция окна при получении WM_DESTROY вызывала PostQuitMessage, а все остальные передавала в DefWindowProc. При запуске из под TD или Olly ошибка не появлялась.
А сегодня, после добавления кода, программа стала работать и без отладчика.


Дата: Окт 17, 2003 01:34:25

В OllyDbg присутствует такой баг, когда отлаживаемая им программа работает нормально, а без него она вылетает с ошибкой. Сам пару раз на такое напарывался, с чем это связано не знаю.


Дата: Окт 17, 2003 04:22:45

SK: windbg rulez -)
хотя поклонники TD больше тяготеют к Olly
2 all: говорила мне бабка - обнуляй все дефолт - параметры перед вызовом функций winapi


Дата: Окт 17, 2003 18:19:59

санкс, только-только сам собирался постить проблему. Аналогичные грабли. ОСь-XP RUS+UKR langpack.


Дата: Окт 22, 2003 19:31:32

мля. Вроде-бы проблема решилась таким кодом:
invoke RegisterClassEx,addr class_struct
movzx eax,ax
invoke CreateWindowEx,0,eax,...

Но вот сегодня прога вылетела. Точно в том же месте, что и раньше. Значит трабла много глубже :(


Дата: Окт 23, 2003 14:14:29

А на ошибки проверка есть? Может, класс не зарегистрировался? У меня все работает. Я надеюсь, ты убираешь в стиле флаг CS_GLOBALCLASS?


Дата: Окт 23, 2003 15:42:11

masquer
А на ошибки проверка есть?
Есть. Класс 100% регистрируется. Стиль: (CS_HREDRAW or CS_VREDRAW).

Больше ошибка не появлялась, хотя я проект приблизительно 150 раз еще запускал. Но то что ошибка была именно в CreateWindowEx и именно из-за атома, который возвращает RegisterClassEx - 100%. Гарантирую.

ну что ж, спишем на очередные виндозные глюки? :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072