Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 14.01.2006
Вот решил поучить асму под Win32.
помогите разобратся что я делаю не так:
Код:
.386
.model flat,stdcall
 
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
 
 
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
 
.DATA                     ; Иницилизиpуемые данные
 
ClassName db "SimpleWinClass",0       ; Имя нашего класса окна
AppName db "Наше первое окно",0       ; Имя нашего окна
 
 
.DATA?                ; Hеиницилизиpуемые данные
hInstance HINSTANCE ?       ; Дескриптор нашей пpогpаммы
CommandLine LPSTR ?
.CODE                ; Здесь начинается наш код
start:
invoke GetModuleHandle, NULL  ; Взять дескриптор пpогpаммы
                                 ; Под Win32, hmodule==hinstance mov hInstance,eax
mov hInstance,eax
 
invoke GetCommandLine   ; Взять командную стpоку. Вы не обязаны
                           ; вызывать эту функцию ЕСЛИ ваша пpогpамма не обpабатывает командную стpоку.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT        ; вызвать основную функцию
invoke ExitProcess, eax           ; Выйти из пpогpаммы.
                                     ; Возвpащаемое значение, помещаемое в eax, беpется из WinMain
 
WinMain proc
 
   hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX      ; создание локальных пеpеменных в стеке
    LOCAL msg:MSG
    LOCAL hwnd:HWND
 
 
    mov   wc.cbSize,SIZEOF WNDCLASSEX   ; заполнение стpуктуpы 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  ; pегистpация нашего класса окна
    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   ; отобpазить наше окно на десктопе
    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 ; сохpанение возвpащаемого значения в eax
    ret
 
WinMain endp
 
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
 
    .IF uMsg==WM_DESTROY            ; если пользователь закpывает окно
        invoke PostQuitMessage,NULL    ; выходим из пpогpаммы
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam     ; функция обpаботки окна
        ret
    .ENDIF
    xor eax,eax
 
    ret
WndProc endp
 
 
end start

компилирую это так
Код:
ml.exe /c /coff 2.asm
link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib 2.obj

компилятор выдает ошибки, скажите че не так.
спасибо


Последний раз редактировалось serega13 18.03.2006 0:19, всего редактировалось 1 раз.


Партнер
 

Member
Статус: Не в сети
Регистрация: 14.12.2005
Откуда: Питер
А чё за ошибки?


 

Junior
Статус: Не в сети
Регистрация: 14.01.2006
Код:
error a2111: conflicting parametr definition
error a2008: syntax error : HISTANCE
error a2012: PROC, MACRO, or macro repeat directive must precode LOC AL
error a2012: PROC, MACRO, or macro repeat directive must precode LOC AL
error a2006: undefined symbol :wc
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :CmdShow
error a2114: INVOKE argument type mismatch : argument : 2
error a2006: undefined symbol :hwnd
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :hwnd
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :msg
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :msg
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :msg
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :msg
error a2114: INVOKE argument type mismatch : argument : 1
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :wc
error a2006: undefined symbol :hwnd
error a2006: undefined symbol :msg


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
serega13, пожалуйста, почитай tutorial, а?
Там очень наглядно, есть примеры, все разжевано очень подробно. :)
Для начала используй примеры к урокам.
А то исправлять твои грамматические ошибки ну совсем не интересно.
Что за "HISTANCE"? ...
Добавлено спустя 36 секунд


 

Member
Статус: Не в сети
Регистрация: 26.10.2004
Откуда: СПб
serega13
Не объявлены структуры wc и msg, переменная hwnd, неправильно написано hInstance, и вообще нафига было это постить :) Можно и самому разобраться.


 

Пипл скажите плиз - зачем нужна функция 4c00h. Я понимаю что это означает завершение работы модуля и передача управления операционной системе. Но что будет если этого не сделать? И почему её нужно использовать?


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Stalkwolf
имхо - иначе выполнение программы продолжиться, но т.к. нет возврата управления, то будет выполняться МУСОР за кодом программы, что приведет к ее вылету.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
4С00h? Под Win32? Это не перебор??


 

Member
Статус: Не в сети
Регистрация: 26.10.2004
Откуда: СПб
Перебор в том что постить в двух ветках одно и тоже..


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan