error A2111 в примере 24-го урока Iczeliona

Тема в разделе "WASM.BEGINNERS", создана пользователем 8Observer8, 27 июл 2011.

  1. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    Здравствуйте!

    По этой ссылке был подобный вопрос, но ответ не подходит к моему случаю.

    24-й урок Iczeliona

    Ошибка: mousehook(12) : error A2111: conflicting parameter definition

    В следующем коде:

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include e:\ProgramFiles\masm32\include\windows.inc
    5. include e:\ProgramFiles\masm32\include\user32.inc
    6. include e:\ProgramFiles\masm32\include\kernel32.inc
    7. include mousehook.inc
    8. includelib mousehook.lib
    9. includelib e:\ProgramFiles\masm32\lib\user32.lib
    10. includelib e:\ProgramFiles\masm32\lib\kernel32.lib
    11.  
    12. wsprintfA proto C :DWORD,:DWORD,:VARARG
    13. wsprintf TEXTEQU <wsprintfA>
    14. .const
    15. IDD_MAINDLG                     equ 101
    16. IDC_CLASSNAME                   equ 1000
    17. IDC_HANDLE                      equ 1001
    18. IDC_WNDPROC                     equ 1002
    19. IDC_HOOK                        equ 1004
    20. IDC_EXIT                        equ 1005
    21. WM_MOUSEHOOK equ WM_USER+6
    22.  
    23. DlgFunc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    24. .data
    25. HookFlag dd FALSE
    26. HookText db "&Hook",0
    27. UnhookText db "&Unhook",0
    28. template db "%lx",0
    29. .data?
    30. hInstance dd ?
    31. hHook dd ?
    32. .code
    33. start:
    34.     invoke GetModuleHandle,NULL
    35.     mov hInstance,eax
    36.     invoke DialogBoxParam,hInstance,IDD_MAINDLG,NULL,addr DlgFunc,NULL
    37.     invoke ExitProcess,NULL
    38.  
    39. DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    40.     LOCAL hLib:DWORD
    41.     LOCAL buffer[128]:byte
    42.     LOCAL buffer1[128]:byte
    43.     LOCAL rect:RECT
    44.     .if uMsg==WM_CLOSE
    45.         .if HookFlag==TRUE
    46.             invoke UninstallHook
    47.         .endif
    48.         invoke EndDialog,hDlg,NULL
    49.     .elseif uMsg==WM_INITDIALOG
    50.         invoke GetWindowRect,hDlg,addr rect
    51.         invoke SetWindowPos,hDlg,HWND_TOPMOST,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW
    52.     .elseif uMsg==WM_MOUSEHOOK
    53.         invoke GetDlgItemText,hDlg,IDC_HANDLE,addr buffer1,128
    54.         invoke wsprintf,addr buffer,addr template,wParam
    55.         invoke lstrcmpi,addr buffer,addr buffer1
    56.         .if eax!=0
    57.             invoke SetDlgItemText,hDlg,IDC_HANDLE,addr buffer
    58.         .endif
    59.         invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer1,128
    60.         invoke GetClassName,wParam,addr buffer,128
    61.         invoke lstrcmpi,addr buffer,addr buffer1
    62.         .if eax!=0
    63.             invoke SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer
    64.         .endif
    65.         invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr buffer1,128
    66.         invoke GetClassLong,wParam,GCL_WNDPROC
    67.         invoke wsprintf,addr buffer,addr template,eax
    68.         invoke lstrcmpi,addr buffer,addr buffer1
    69.         .if eax!=0
    70.             invoke SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer
    71.         .endif
    72.     .elseif uMsg==WM_COMMAND
    73.         .if lParam!=0
    74.             mov eax,wParam
    75.             mov edx,eax
    76.             shr edx,16
    77.             .if dx==BN_CLICKED
    78.                 .if ax==IDC_EXIT
    79.                     invoke SendMessage,hDlg,WM_CLOSE,0,0
    80.                 .else
    81.                     .if HookFlag==FALSE
    82.                         invoke InstallHook,hDlg
    83.                         .if eax!=NULL
    84.                             mov HookFlag,TRUE
    85.                             invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText
    86.                         .endif
    87.                     .else
    88.                         invoke UninstallHook
    89.                         invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText
    90.                         mov HookFlag,FALSE
    91.                         invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL
    92.                         invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL
    93.                         invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL
    94.                     .endif
    95.                 .endif
    96.             .endif
    97.         .endif
    98.     .else
    99.         mov eax,FALSE
    100.         ret
    101.     .endif
    102.     mov eax,TRUE
    103.     ret
    104. DlgFunc endp
    105.  
    106. end start
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.879
    8Observer8
    попробуй закомментировать 12-ую строку "wsprintf TEXTEQU <wsprintfA>" и везде по тексту программы исправить wsprintf на wsprintfA
     
  3. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    К сожалению, не помогло. Компилятор не считает пустые строки или с нуля считает? По моейму 12 строка - это wsprintfA proto C :lol: WORD,:lol: WORD,:VARARG

    После замены:
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include e:\ProgramFiles\masm32\include\windows.inc
    5. include e:\ProgramFiles\masm32\include\user32.inc
    6. include e:\ProgramFiles\masm32\include\kernel32.inc
    7. include mousehook.inc
    8. includelib mousehook.lib
    9. includelib e:\ProgramFiles\masm32\lib\user32.lib
    10. includelib e:\ProgramFiles\masm32\lib\kernel32.lib
    11.  
    12. wsprintfA proto C :DWORD,:DWORD,:VARARG
    13. ;wsprintf TEXTEQU <wsprintfA>
    14. .const
    15. IDD_MAINDLG                     equ 101
    16. IDC_CLASSNAME                   equ 1000
    17. IDC_HANDLE                      equ 1001
    18. IDC_WNDPROC                     equ 1002
    19. IDC_HOOK                        equ 1004
    20. IDC_EXIT                        equ 1005
    21. WM_MOUSEHOOK equ WM_USER+6
    22.  
    23. DlgFunc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    24. .data
    25. HookFlag dd FALSE
    26. HookText db "&Hook",0
    27. UnhookText db "&Unhook",0
    28. template db "%lx",0
    29. .data?
    30. hInstance dd ?
    31. hHook dd ?
    32. .code
    33. start:
    34.     invoke GetModuleHandle,NULL
    35.     mov hInstance,eax
    36.     invoke DialogBoxParam,hInstance,IDD_MAINDLG,NULL,addr DlgFunc,NULL
    37.     invoke ExitProcess,NULL
    38.  
    39. DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    40.     LOCAL hLib:DWORD
    41.     LOCAL buffer[128]:byte
    42.     LOCAL buffer1[128]:byte
    43.     LOCAL rect:RECT
    44.     .if uMsg==WM_CLOSE
    45.         .if HookFlag==TRUE
    46.             invoke UninstallHook
    47.         .endif
    48.         invoke EndDialog,hDlg,NULL
    49.     .elseif uMsg==WM_INITDIALOG
    50.         invoke GetWindowRect,hDlg,addr rect
    51.         invoke SetWindowPos,hDlg,HWND_TOPMOST,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW
    52.     .elseif uMsg==WM_MOUSEHOOK
    53.         invoke GetDlgItemText,hDlg,IDC_HANDLE,addr buffer1,128
    54.         invoke wsprintfA,addr buffer,addr template,wParam
    55.         invoke lstrcmpi,addr buffer,addr buffer1
    56.         .if eax!=0
    57.             invoke SetDlgItemText,hDlg,IDC_HANDLE,addr buffer
    58.         .endif
    59.         invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer1,128
    60.         invoke GetClassName,wParam,addr buffer,128
    61.         invoke lstrcmpi,addr buffer,addr buffer1
    62.         .if eax!=0
    63.             invoke SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer
    64.         .endif
    65.         invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr buffer1,128
    66.         invoke GetClassLong,wParam,GCL_WNDPROC
    67.         invoke wsprintfA,addr buffer,addr template,eax
    68.         invoke lstrcmpi,addr buffer,addr buffer1
    69.         .if eax!=0
    70.             invoke SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer
    71.         .endif
    72.     .elseif uMsg==WM_COMMAND
    73.         .if lParam!=0
    74.             mov eax,wParam
    75.             mov edx,eax
    76.             shr edx,16
    77.             .if dx==BN_CLICKED
    78.                 .if ax==IDC_EXIT
    79.                     invoke SendMessage,hDlg,WM_CLOSE,0,0
    80.                 .else
    81.                     .if HookFlag==FALSE
    82.                         invoke InstallHook,hDlg
    83.                         .if eax!=NULL
    84.                             mov HookFlag,TRUE
    85.                             invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText
    86.                         .endif
    87.                     .else
    88.                         invoke UninstallHook
    89.                         invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText
    90.                         mov HookFlag,FALSE
    91.                         invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL
    92.                         invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL
    93.                         invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL
    94.                     .endif
    95.                 .endif
    96.             .endif
    97.         .endif
    98.     .else
    99.         mov eax,FALSE
    100.         ret
    101.     .endif
    102.     mov eax,TRUE
    103.     ret
    104. DlgFunc endp
    105.  
    106. end start
     
  4. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    Файл make.bat:
    Код (Text):
    1. @echo off
    2. e:\ProgramFiles\masm32\bin\ml /c /coff "%cd%\mousehook".asm
    3. e:\ProgramFiles\masm32\bin\link /subsystem:windows "%cd%\mousehook".obj
    4. pause>nul
     
  5. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Попробуйте удалить обе строки (12 и 13, отсчёт с единицы, конечно).
     
  6. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    exe'шник получился, но не запускается.
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.879
    8Observer8
    с закоментированными строками
    Код (Text):
    1. ;wsprintfA proto C :DWORD,:DWORD,:VARARG
    2. ;wsprintf TEXTEQU <wsprintfA>
    создается экзе и всё работает
    к экзешнику нужен mousehook.dll в том же каталоге
     
  8. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    Спасибо, Вам, ОГРОМНОЕ! С Вашим батником всё работает. Я правда не понял почему, но сейчас главное, что работает. Теперь буду с кодом разбираться.
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.879
    8Observer8
    Еще вот здесь посмотри
     
  10. 8Observer8

    8Observer8 New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    6
    Спасибо, Mikl___!