.386
.model flat,stdcall
option casemap:none
include D:\masm32\include\windows.inc
include D:\masm32\include\user32.inc
includelib D:\masm32\lib\user32.lib ; calls to functions in user32.lib and kernel32.lib
include D:\masm32\include\kernel32.inc
includelib D:\masm32\lib\kernel32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
.DATA ; initialized data
ClassName db "SimpleWinClass",0 ; Имя нашего класса окна
AppName db "Our First Window",0 ; Имя нашего окна
.DATA? ; Hеиницилизируемые данные
hInstance HINSTANCE ? ; Хэндл нашей программы
CommandLine LPSTR ?
.CODE ; Здесь начинается наш код
start:
invoke GetModuleHandle, NULL ; Взять хэндл программы
; Под Win32, hmodule==hinstance mov hInstance,eax
mov hInstance,eax
invoke GetCommandLine ; Взять командную строку. Вы не обязаны
;вызывать эту функцию ЕСЛИ ваша программа не обрабатывает командную строку.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT ; вызвать основную функцию
invoke ExitProcess, eax ; Выйти из программы.
; Возвращаемое значение, помещаемое в eax, берется из WinMain'а.
WinMain proc
hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; создание локальных переменных в стеке
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX ; заполнение структуры wc
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
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
invoke RegisterClassEx,addr wc ; регистрация нашего класса окна
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow ; отобразить наше окно на десктопе
invoke UpdateWindow, hwnd ; обновить клиентскую область
.WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam ; сохранение возвращаемого значения в eax
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY ; если пользователь закрывает окно
invoke PostQuitMessage,NULL ; выходим из программы
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция обработки окна
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start
Ошибки при компиляции программы (MASM)
Вобщем изучаю сейчас MASM по туториалу ICZELION. Пробую откомпилировать код программы, выдает кучу ошибок на этапе компиляции.
Цитата:
WinMain proc hInst: DWORD,hPrevInst: DWORD,CmdLine: DWORD,CmdShow: DWORD
Спасибо, теперь все заработало!!!