Pro*_*rmr 0 windows x86 assembly masm32
我正在关注Iczelion的Win32教程,特别是教程3("简单窗口"),当试图为了实验而"剥离"一些错误处理和不必要的代码时,我在编译时遇到以下错误:
test.asm(38) : error A2111: conflicting parameter definition.
Run Code Online (Sandbox Code Playgroud)
这是一行:
第38行:
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdShow:DWORD
Run Code Online (Sandbox Code Playgroud)
我的问题是:这行代码有什么问题?
提前致谢.
编辑:
这是整个脚本,其中有违规行注释:
.386
.model flat, stdcall
option casemap :none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
.data
ClassName db "Testwin", 0
AppName db "Testing Window", 0
.data?
hInstance HINSTANCE ?
.code
start:
push NULL
call GetModuleHandle
mov hInstance,eax
push SW_SHOWDEFAULT
push NULL
push hInstance
call WinMain
push eax
call ExitProcess
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdShow:DWORD ; this is the line
; local vars:
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
; defining the window:
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
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
;create the window
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
invoke ShowWindow,hwnd,CmdShow
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
cmp uMsg, WM_DESTROY
jne _next
invoke PostQuitMessage, NULL
_next:
WndProc endp
end start
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
这三条错误消息准确地解释了您做错了什么.
test.asm(38) : error A2111: conflicting parameter definition.
Run Code Online (Sandbox Code Playgroud)
再看看你的原型:
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdShow:DWORD
Run Code Online (Sandbox Code Playgroud)
WinMain与先前声明冲突的参数.如果查看前面的声明,您会看到参数列表不同.
下一个错误:
test.asm(69) : error A2008: syntax error: WndProc
Run Code Online (Sandbox Code Playgroud)
我们来看看那一行:
WndProc WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
Run Code Online (Sandbox Code Playgroud)
语法错误意味着您违反了语法.在这种情况下,这是因为汇编程序无法弄清楚如何处理第二个WndProc; 重复WndProc在这里不合法.
第三个错误:
test.asm(75) : fatal error A1010: unmatched block nesting: WndProc
Run Code Online (Sandbox Code Playgroud)
由于该WndProc过程从未正确启动,因此您尝试结束该过程无效.
TL; DR:读取错误消息.他们会解释你做错了什么.
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |