Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 713
от 04.04.2007, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 365, Экспертов: 32
В номере:Вопросов: 1, Ответов: 2


Вопрос № 80328: Ув эксперты! Помогите чайнику.Для вывода пользуюсь макросом (см ниже), вывожу lParam WM_SIZE. Когда вывожу так: .IF uMsg==WM_SIZE MsgBox "0x%x",lParam выводится значение 2bd03b8, Когда вывож...

Вопрос № 80.328
Ув эксперты!

Помогите чайнику.Для вывода пользуюсь макросом (см ниже),
вывожу lParam WM_SIZE.

Когда вывожу так:
.IF uMsg==WM_SIZE
MsgBox "0x%x",lParam

выводится значение 2bd03b8,

Когда вывожу младшее слово:
.IF uMsg==WM_SIZE
MsgBox "0x%x",word ptr lParam

выводится 3b8,

а,когда старшее слово:
MsgBox "0x%x",word ptr lParam+1

MessageBox весь бледный,в сером цвете и не видно ни надписей на кнопках ни самой выводимой инфы.Не могу разобраться,что здесь не так.

Спасибо.

Приложение:

Отправлен: 30.03.2007, 03:07
Вопрос задал: Жлукто Александр/Jeff (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Жлукто Александр/Jeff!

Обратите внимание на очередность параметров передаваемых
в макрос поменяйте их местами.
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 7-ой класс)
Ответ отправлен: 30.03.2007, 11:22

Отвечает: Xaud
Здравствуйте, Жлукто Александр/Jeff!

Дело в том, что Windows очень чувствительна к адресам передаваемых данных. Поясню: двойные слова (DWORD) ДОЛЖНЫ быть выравнены по границе 4, т.е. находиться по адресу кратному 4; слова (WORD) - по границе 2, т.е. по адресу кратному 2. Иначе начинаются в лучшем случае глюки.
В вашем случае:
1. Для вывода старшего слова нужно было БЫ использовать такой код:
MsgBox "0x%x",word ptr lParam+2,
но...
2. Кроме того, функция wsprintf унаследована из С, но несмотря на это, ВСЕГДА фактически все параметры этой функции - ДВОЙНЫЕ СЛОВА!!!
Таким образом,
MsgBox "0x%x", word ptr lParam - делать нельзя!!!
Надо делать что-то вроде:
mov edx,lParam
and edx,0FFFFH ;оставляем только младшее слово
MsgBox "0x%x",edx ;вот так правильно

а для старшего слова:

mov edx,lParam
shr edx,16 ;оставляем только старшее слово
MsgBox "0x%x",edx ;вот так правильно

Ответ отправил: Xaud (статус: 1-ый класс)
Ответ отправлен: 30.03.2007, 21:03
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное