|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.11.2023, 18:30 | #11 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Цитата:
Тут разве не должно быть PUSH EAX — передавать класс, полученный от регистрации? Я посмотрел пример MINPAD от FASM, там похожий кусок выглядит так: Код:
|
|
10.11.2023, 18:55 | #12 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Цитата:
Цитата:
Все есть. Оттуда он и пошел. Даже WNDCLASS описана нормально. |
||
11.11.2023, 14:51 | #13 | |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Цитата:
А invoke - принципиально не буду, я ж писал, что хочу, чтоб был чистый ассемблер, безо всяких макросов. |
|
11.11.2023, 15:09 | #14 | |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Цитата:
Где-то в справочнике встречал, что ошибка может быть, если оконная функция некорректно обрабатывает сообщение WM_CREATE, может тут у меня что-то не так? |
|
11.11.2023, 15:42 | #15 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Во всех учебниках передается offset на имя класса. Но я на всякий случай попробовал, как ты говоришь, запушить еах, который после регистрации. Мне вообще выдало ошибку системы (это ту, когда "приносим извинения, ляляля, отправить отчёт, не отправлять.." Короче - фигня какая-то, тем более, как я понял, там еще надо AddGlodalAtom вызывать, короче, геморрой полный..
|
14.11.2023, 19:14 | #16 | ||
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
ураураураураурауоауоа
Я сделал окно только что, в пол-первоного ночи проснулся, и дошло до меня. Оказывается, процедура окна неправильно сообщения обрабатывала. Я пользовался учебником В.Ю.Пирогова "Assembler для Windows", а там неправильно написано: Цитата:
Цитата:
Поэтому и выдавало ошибку 0578h, что DefWindowProc искала дескриптор окна по адресу ebp+8, где его отродясь не было. Спасибо всем, кто пытался мне помочь, буду продолжать дальше,и доставать вас своими тупыми вопросами! Последний раз редактировалось groverx; 15.11.2023 в 00:57. |
||
15.11.2023, 01:09 | #17 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Если кому надо - вот готовая программа для окна на чистом ассемблере
Код:
Последний раз редактировалось groverx; 15.11.2023 в 01:11. |
15.11.2023, 08:26 | #18 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Так Пирогов сначала сохраняет EBP на стек, а потом уже отсчитывает адреса, а вы не сохраняете и не восстанавливаете EBP. И почему вы не соблюдаете stdcall, не очищая стек после вызова okProc?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
16.11.2023, 07:30 | #19 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Это прикол такой?
160-строк кода, чтобы показать пустое окно? Пересмотрите свои методы программирования, или займитесь в этой жизни чем-нибудь другим. Комп с компилятором должны работать на вас, а здесь (отказываясь от invoke) наоборот вы отдаёте себя им в жертву. Боюсь представить размер этого исходника, если добавить в окно пару-тройку элементов управления, с процедурами их обработки. Во-первых, для обычных форточек практичней использовать "диалоговые окна" вызовом DialogBoxParam(), тогда избавляешься сразу от: RegisterClass(), CreateWindow(), GetMessage(), TranslateMessage(), DispatchMessage(). Во-вторых, чтобы не создавать в последующем отдельные элементы окна чз десятки вызовов CreateWindow(), нужно использовать "секцию ресурсов". А обработчик GetLastError() в хвосте завершил всю "прелесть" данного кода. Есть-же специальные API для перевода из hex в строку (например тот-же wsprintf() из user32.dll). Чтобы расшифровать код-ошибки и сбоксить его в текстовом виде, имеется FormatMessage(). Например такая процедура на этапе отладки, будет возвращать характер последней ошибки в более понятной форме: Код:
Нашедшего выход - затаптывают первым..
Последний раз редактировалось R71MT; 16.11.2023 в 11:34. |
16.11.2023, 07:32 | #20 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
а зачем ему это, если код и так работает?
ведь всякие там макросы и соглашения о вызовах придуманы чисто для ламеров.
Нашедшего выход - затаптывают первым..
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос от новичка | Валерий718 | Помощь студентам | 4 | 23.10.2013 19:28 |
Вопрос новичка | geranton | Общие вопросы Delphi | 2 | 23.03.2012 14:00 |
Вопрос новичка | vaultboy2010 | Общие вопросы C/C++ | 3 | 02.10.2011 01:51 |
Создание функции вопрос от новичка C | CKent | Общие вопросы C/C++ | 2 | 07.12.2008 17:31 |