Вопрос по компиляции

Тема в разделе "WASM.WIN32", создана пользователем Uni_HK, 8 ноя 2008.

  1. Uni_HK

    Uni_HK New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    8
    Имеется код(это из Уроки Iczelion'а):
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include kernel32.inc
    6. include user32.inc
    7.  
    8. include windows.inc
    9.  
    10. includelib kernel32.lib
    11. includelib user32.lib
    12.  
    13. .data
    14.  
    15.    ClassName db "DLGCLASS",0
    16.    MenuName db "MyMenu",0
    17.    DlgName db "MyDialog",0
    18.    AppName db "Our First Dialog Box",0
    19.    TestString db "Wow! I'm in an edit box now",0
    20.  
    21.    .data?
    22.  
    23.    hInstance HINSTANCE ?
    24.    CommandLine LPSTR ?
    25.    buffer db 512 dup(?)
    26.  
    27.    .const
    28.  
    29.    IDC_EDIT        equ 3000
    30.    IDC_BUTTON      equ 3001
    31.    IDC_EXIT        equ 3002
    32.    IDM_GETTEXT     equ 32000
    33.    IDM_CLEAR       equ 32001
    34.    IDM_EXIT        equ 32002
    35.  
    36.    .code
    37.  
    38.    start:
    39.  
    40.        invoke GetModuleHandle, NULL
    41.        mov    hInstance,eax
    42.        invoke GetCommandLine
    43.        mov CommandLine,eax
    44.        invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    45.        invoke ExitProcess,eax
    46.  
    47.    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    48.  
    49.        LOCAL wc:WNDCLASSEX
    50.        LOCAL msg:MSG
    51.        LOCAL hDlg:HWND
    52.        mov   wc.cbSize,SIZEOF WNDCLASSEX
    53.        mov   wc.style, CS_HREDRAW or CS_VREDRAW
    54.        mov   wc.lpfnWndProc, OFFSET WndProc
    55.        mov   wc.cbClsExtra,NULL
    56.        mov   wc.cbWndExtra,DLGWINDOWEXTRA
    57.        push  hInst
    58.        pop   wc.hInstance
    59.        mov   wc.hbrBackground,COLOR_BTNFACE+1
    60.        mov   wc.lpszMenuName,OFFSET MenuName
    61.        mov   wc.lpszClassName,OFFSET ClassName
    62.        invoke LoadIcon,NULL,IDI_APPLICATION
    63.        mov   wc.hIcon,eax
    64.        mov   wc.hIconSm,eax
    65.        invoke LoadCursor,NULL,IDC_ARROW
    66.        mov   wc.hCursor,eax
    67.        invoke RegisterClassEx, addr wc
    68.        invoke CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
    69.        mov   hDlg,eax
    70.        invoke ShowWindow, hDlg,SW_SHOWNORMAL
    71.        invoke UpdateWindow, hDlg
    72.        invoke GetDlgItem,hDlg,IDC_EDIT
    73.        invoke SetFocus,eax
    74.  
    75.        .WHILE TRUE
    76.            invoke GetMessage, ADDR msg,NULL,0,0
    77.            .BREAK .IF (!eax)
    78.            invoke IsDialogMessage, hDlg, ADDR msg
    79.            .IF eax ==FALSE
    80.              invoke TranslateMessage, ADDR msg
    81.              invoke DispatchMessage, ADDR msg
    82.            .ENDIF
    83.        .ENDW
    84.        mov     eax,msg.wParam
    85.  
    86.        ret
    87.  
    88.    WinMain endp
    89.  
    90.    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    91.  
    92.        .IF uMsg==WM_DESTROY
    93.            invoke PostQuitMessage,NULL
    94.        .ELSEIF uMsg==WM_COMMAND
    95.            mov eax,wParam
    96.            .IF lParam==0
    97.                .IF ax==IDM_GETTEXT
    98.                    invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512
    99.                    invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
    100.                .ELSEIF ax==IDM_CLEAR
    101.                    invoke SetDlgItemText,hWnd,IDC_EDIT,NULL
    102.                .ELSE
    103.                    invoke DestroyWindow,hWnd
    104.                .ENDIF
    105.            .ELSE
    106.                mov edx,wParam
    107.                shr edx,16
    108.                .IF dx==BN_CLICKED
    109.                    .IF ax==IDC_BUTTON
    110.                        invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString
    111.                    .ELSEIF ax==IDC_EXIT
    112.                        invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
    113.                    .ENDIF
    114.                .ENDIF
    115.            .ENDIF
    116.        .ELSE
    117.            invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    118.  
    119.            ret
    120.  
    121.        .ENDIF
    122.        xor    eax,eax
    123.  
    124.        ret
    125.  
    126.    WndProc endp
    127.  
    128.    end start
    И файл реурсов:
    Код (Text):
    1. #define IDC_EDIT                                       3000
    2.    #define IDC_BUTTON                                3001
    3.    #define IDC_EXIT                                       3002
    4.    #define IDM_GETTEXT                             32000
    5.    #define IDM_CLEAR                                  32001
    6.    #define IDM_EXIT                                      32003
    7.    MyDialog DIALOG 10, 10, 205, 60
    8.    STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    9.    WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
    10.    CAPTION "Our First Dialog Box"
    11.    CLASS "DLGCLASS"
    12.    BEGIN
    13.        EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    14.        DEFPUSHBUTTON   "Say Hello", IDC_BUTTON,    141,10,52,13
    15.        PUSHBUTTON      "E&xit", IDC_EXIT,  141,26,52,13, WS_GROUP
    16.    END
    17.  
    18.    MyMenu  MENU
    19.    BEGIN
    20.        POPUP "Test Controls"
    21.        BEGIN
    22.            MENUITEM "Get Text", IDM_GETTEXT
    23.            MENUITEM "Clear Text", IDM_CLEAR
    24.            MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/
    25.            MENUITEM "E&xit", IDM_EXIT
    26.        END
    27.    END
    При ассемблировании не создаётся файл .res и при линковке выдаёт ошибку:
    Код (Text):
    1. LINK : fatal error LNK1181: cannot open input file ....res
    Если удалить из файла ресурсов меню, то всё нормально.
    /*Для программтрования использую WinAsm.*/

    В чем тут дело?
     
  2. sp1k

    sp1k New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    24
    Из того же урока:
    "Вы пишете шаблон диалогового окна, описывая хаpактеpистики диалогового окна и его контpолов, а затем компилиpуете его с помощью pедактоpа pесуpсов"

    Нужные слова выделены...
     
  3. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Используй rc.exe для компиляции ресурсов.
     
  4. Uni_HK

    Uni_HK New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    8
    Спасибо разобрался.
    /*Просто в прошлых примерах выполнял просто ассемблирование и линковку и все работало.*/
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Uni_HK
    В комплекте с masm32 от Hutchesson идёт папочка icztutes там всё компилится сравни то что ты запостил с tute10-1, найди отличия и всё получится :) и ещё именовать меню, диалоги и прочие ресурсы имхо лучше константами, а не текстовыми строками.

    sp1k, Gnil
    так что ресурсы скомпилить он похоже не забывает :), просто эта компиляция обламывается.
     
  6. Uni_HK

    Uni_HK New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    8
    Кстати, не подскажете где справочник по WinApi достать в электронном виде?
     
  7. Uni_HK

    Uni_HK New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    8
    Y_Mur
    А можно пример?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Uni_HK
    :) Читай FAQ. Тему в бегиннерс.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Uni_HK
    http://www.wasm.ru/forum/viewtopic.php?id=29496

    В ресурсах:
    #define ID_Menu_Rus 200 // число это твоя константа-идентификатор вместо текстовой строки
    ID_Menu_Rus MENU
    BEGIN
    ...
    в программе:
    ID_Menu_Rus = 200 ; то же число что и в ресурсах
    invoke LoadMenu, [h_proc], ID_Menu_Rus