(5): i can not find "include windows.inc" - не компилируется кодоворот - Assembler

Узнай цену своей работы

Формулировка задачи:

.386
     .model flat,stdcall
     option casemap:none
     ; Подключаем необходимые библиотеки и описания их структур и функций
     include windows.inc
     include user32.inc
     include kernel32.inc
     include gdi32.inc
     include comdlg32.inc
     includelib windows.inc
     includelib user32.lib
     includelib kernel32.lib
     includelib gdi32.lib
     includelib comdlg32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD; описываем прототип функции -для функции WinMain объявлюются 4 переменные размером двойное слово, которые использует функция
      ;далее при вызове этой функции в программе следуют 4 параметра   дескриптор текущего экземпляра окна  дескриптор предыдущего экземпляра окна  указатель на командную строку  показывает состояние окна 
; Макрос, заносящий значения компонент палитры в регистр EAX
RGB macro red,green,blue
         mov     eax,blue shl 16 + green shl 8 + red
endm
; Макрос для вставки текста
szText MACRO Name,Text:VARARG ;vararg. Это означает, что все, что указанно при вызове макроса в качестве параметров присваивается этому параметру как единая текстовая строка.
        .data
    Name     db Text,0  ;Директива NAME обеспечивает другой способ назначения имени модулю. Задает имя модуля объектного файла. В режиме MASM эта директива не действует, она работает только в режиме Ideal.
        .code
endm
.const
button1ID    equ 1
.data?
hwndbutton1  HWND ?
hInstance    HINSTANCE ?
CommandLine  LPSTR ?
.data
Textbutton1  db "Button1",0
;_______________
ClassName    db "MASM Builder",0
BtnClName    db "button",0
StatClName   db "static",0
EditClName   db "edit",0
LboxClName   db "listbox",0
CboxClName   db "combobox",0
ReditClName  db "richedit",0
RichEditLib  db "riched32.dll",0
Caption      db "Form",0
;_______________
.code
start:
         ; Получаем описатель нашего модуля
     invoke   GetModuleHandle,NULL  ;Если этот параметр - NULL, GetModuleHandle возвращает дескриптор файла, используемый, чтобы создать вызывающий процесс (.exe файл).
     mov      hInstance,eax
     ; Получаем адрес командной строки
     invoke   GetCommandLine
     ; Вызываем главную процедуру в стиле C++
     invoke   WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT; 4 параметр Определяет, как окно должно быть показано
     ; Завершаем процесс
     invoke   ExitProcess,eax
; Главная процедура в стиле C++
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD ;метка proc тип язык USES регистры ,ret ,метка endp
LOCAL   wc  :WNDCLASSEX ;директива LOCAL нужна дял объявления локальный переменных с процедурах. Локальные переменные содержатся в стеке и существуют только во время выполнения процедуры.
LOCAL   msg     :MSG
LOCAL   hwnd    :HWND
         ; Заполняем структуру WNDCLASSEX, хранящую информацию о создаваемом классе окон
     mov      wc.cbSize,SIZEOF WNDCLASSEX  ; размер структуры
     mov      wc.style,CS_HREDRAW or CS_VREDRAW  ; стиль окна
     mov      wc.lpfnWndProc,OFFSET WndProc  ; адрес процедуры обработки сообщений
     mov      wc.cbClsExtra,NULL  ; кол-во дополнительных байт за структурой класса (0)
     mov      wc.cbWndExtra,NULL  ; кол-во дополнительных байт за экземпляром окна (0)
     push     hInst
     pop      wc.hInstance  ; описатель экземпляра процесса с процедурой обработки сообщений
     RGB      235,233,216  ; EAX = код серо-бежевого цвета
     invoke   CreateSolidBrush,eax  ; создаём кисть заполнения однородным цветом EAX
     mov      wc.hbrBackground,eax  ; кисть для заполнения фона (серо-
бежевым цветом)
     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.lpszMenuName,NULL  ; имя или идентификатор меню (0)
     ; Регистрируем класс и создаём окно
     invoke   RegisterClassEx,addr wc
     invoke   CreateWindowEx,0,ADDR ClassName,ADDR Caption,WS_SYSMENU or WS_SIZEBOX,389,82,327,200,0,0,hInst,0
     ; Показываем окно
     mov      hwnd,eax
     INVOKE   ShowWindow,hwnd,SW_SHOWNORMAL
     INVOKE   UpdateWindow,hwnd
     ; Цикл обработки сообщений (стандартный)
     .WHILE TRUE
         INVOKE   GetMessage,ADDR msg,0,0,0  ; ожидаем и получаем сообщение
         .BREAK .IF (!eax)                   ; выходим из цикла, если получаем WM_QUIT (выход из приложения)
         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
     .IF uMsg == WM_DESTROY  ; сообщение об уничтожении окна (передаётся во время закрытия окна)
         invoke   PostQuitMessage,NULL  ; отправляем в очередь сообщение WM_QUIT
     .ELSEIF uMsg == WM_CREATE  ; сообщение о создании окна (передаётся после создания окна)
             ; создаём кнопку с идентификатором = button1ID (кнопка - это тоже окно)
         invoke  CreateWindowEx,0,ADDR BtnClName,ADDR Textbutton1,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,114,71,75,25,hWnd,button1ID,hInstance,0
 
         mov      hwndbutton1,eax  ; сохраняем описатель кнопки
     .ELSEIF uMsg == WM_COMMAND  ; сообщение о команде (например, нажатии на кнопку)
         mov     eax,wParam
         .IF lParam != 0  ; описатель контрола (равен нулю, если это НЕ контрол формы)
            .IF ax == button1ID  ; младшее слово wParam определяет идентификатор контрола
                 shr eax,16
                 .IF ax == BN_CLICKED  ; старшее слово wParam определяет код команды
                         ; Выводим на экран сообщение
                     invoke   MessageBox,hWnd,addr Textbutton1,NULL,MB_ICONINFORMATION
                 .ENDIF
             .ENDIF
         .ENDIF;
     .ELSE  ; другое сообщение
             ; Вызываем стандартный обработчик сообщения
         invoke   DefWindowProc,hWnd,uMsg,wParam,lParam
         ret
     .ENDIF
     xor     eax,eax  ; сообщение обработано
     ret
WndProc endp
end start                              ; Конец программы с указанием точки в

Решение задачи: «(5): i can not find "include windows.inc" - не компилируется кодоворот»

textual
Листинг программы
\masm32\include\ user32.inc

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5