Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в подключаемом файле, windows.inc 
:(
    Опции темы
NFL
Дата 14.1.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Есть следующий текст программы (что то вроде лаюораторной работы) :

Код

.686
.model flat, stdcall
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\kernel32.lib
WinMain proto :DWORD, :DWORD
.data
ClassName db "SimpleWin", 0
AppName db "Обробка повідомлень клавіатури", 0
char WPARAM 20h
.data?
hInstance HINSTANCE ?
.code
_st:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke WinMain, hInstance, SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain proc hInst:HINSTANCE, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
push hInst
pop wc.hInstance
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.hbrBackground, COLOR_WINDOW+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassNane, OFFSET ClassName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx, 0, ADDR ClassName, ADDR AppName, WS_OVERLAPPEDWINDOW,\
CW_USERDEFAULT, CW_USERDEFAULT, CW_USERDEFAULT, CW_USERDEFAULT,\
NULL, NULL, hInst, NULL
mov hwnd, eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam: LPARAM
LOCAL hdc:HDC
LOCAL ps: PAINTSTRUCT
.IF uMsg==WM_DESTROY
invoke PostQuitMessage, 0
.ELSEIF uMsg==WM_CHAR
pushwParam
pop char
invoke InvalidateRect, hWnd, NULL, TRUE
.ELSEIF uMsg==WM_PAINT
invoke BeginPaint, hWnd, ADDR ps
mov hdc, eax
invoke TextOut, hdc, 20, 20, ADDR char, 1
invoke End Paint, hWnd, ADDR ps
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
end _st


На компьютере установлен MASM32 Editor v10.
При попытке ассемблирования получаю кучу сообщений такого вида:


Assembling: C:\masm32\bin\windowproc.asm
\masm32\include\windows.inc(129) : error A2004: symbol type conflict : bool
\masm32\include\windows.inc(7804) : error A2179: structure improperly initialized
\masm32\include\windows.inc(7804) : error A2008: syntax error : in structure
\masm32\include\windows.inc(8711) : error A2179: structure improperly initialized
\masm32\include\windows.inc(8711) : error A2008: syntax error : in structure
\masm32\include\windows.inc(8724) : error A2179: structure improperly initialized
\masm32\include\windows.inc(8724) : error A2008: syntax error : in structure
\masm32\include\windows.inc(8736) : error A2179: structure improperly initialized
\masm32\include\windows.inc(8736) : error A2008: syntax error : in structure


С чем это связано? Ошибка в тексте программы или в самом inc-файле? Как боротьс?... smile  smile 

PM MAIL   Вверх
Mikl_
Дата 15.1.2010, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



NFL, 
Ошибка в каком-то из подключаемых INC-файлов которые объявляют константу или структуру совпадающую по названию с объявленным в windows.inc Выявить можешь просто. Закоментариваешь по одному INC-файлы и смотришь когда исчезнет например ошибка "\masm32\include\windows.inc(7804) : error A2179: structure improperly initialized" после выявления файла начинаешь медитировать smile 
PM MAIL   Вверх
NFL
Дата 15.1.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Mikl_, неее, просто забыл option casemap:none smile 
теперь другая проблема... не видит константу CW_USERDEFAULT, ну да лан, это исправимо цифрами... Но почему то окно не работает как хотелось бы...

Код

.686
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\kernel32.lib

WinMain proto :DWORD, :DWORD
.data
ClassName db "SimpleWin", 0
AppName db "Обробка повідомлень клавіатури", 0
fMenu db "Файл", 0
char WPARAM 20h
.data?
hInstance HINSTANCE ?
.code
_st:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke WinMain, hInstance, SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain proc hInst:HINSTANCE, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
push hInst
pop wc.hInstance
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.hbrBackground, COLOR_WINDOW+1
mov wc.lpszMenuName, ADDR fMenu
mov wc.lpszClassName, OFFSET ClassName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx, 0, ADDR ClassName, ADDR AppName, WS_OVERLAPPEDWINDOW, 100, 100, 100, 100, NULL, NULL, hInst, NULL
mov hwnd, eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam: LPARAM
LOCAL hdc:HDC
LOCAL ps: PAINTSTRUCT
.IF uMsg==WM_DESTROY
invoke PostQuitMessage, 0
.ELSEIF uMsg==WM_CHAR
push wParam
pop char
invoke InvalidateRect, hWnd, NULL, TRUE
.ELSEIF uMsg==WM_PAINT
invoke BeginPaint, hWnd, ADDR ps
mov hdc, eax
invoke TextOut, hdc, 20, 20, ADDR char, 1
invoke EndPaint, hWnd, ADDR ps
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
end _st

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0385 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.