0
我已经设法创建一个窗口(感谢所有人在这里!),但每当它运行,窗口形式,但它立即中断,并弹出一个窗口说“test.exe已停止响应“(test.exe是该程序的名称)。x86汇编masm32窗口应用程序停止响应
下面是代码:
.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 "SimpleWinClass",0
AppName db "If you get this, it worked.",0
char WPARAM 20h
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.code
start:
push NULL
call GetModuleHandle
mov hInstance,eax
call GetCommandLine
mov CommandLine,eax
push SW_SHOWDEFAULT
push CommandLine
push NULL
push hInstance
call WinMain
push eax
call ExitProcess
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
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
push IDI_APPLICATION
push NULL
call LoadIcon
mov wc.hIcon,eax
mov wc.hIconSm,eax
push IDC_ARROW
push NULL
call LoadCursor
mov wc.hCursor,eax
lea eax, wc
push eax
call RegisterClassEx
push NULL
push hInst
push NULL
push NULL
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push WS_OVERLAPPEDWINDOW
lea eax, AppName
push eax
lea eax, ClassName
push eax
push NULL
call CreateWindowEx
mov hwnd,eax
push SW_SHOWNORMAL
push hwnd
call ShowWindow
push hwnd
call UpdateWindow
.WHILE TRUE
push 0
push 0
push NULL
lea eax, msg
push eax
call GetMessage
.BREAK .IF (!eax)
lea eax, msg
push eax
call TranslateMessage
lea eax, msg
call DispatchMessage
.ENDW
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
.IF uMsg==WM_DESTROY
push NULL
call PostQuitMessage
.ELSEIF uMsg==WM_CHAR
push wParam
pop char
push TRUE
push NULL
push hWnd
call InvalidateRect
.ELSEIF uMsg==WM_PAINT
lea eax, ps
push eax
push hWnd
call BeginPaint
mov hdc,eax
push 1
lea eax, char
push eax
push 0
push 0
push hdc
call TextOut
lea eax, ps
push eax
push hWnd
call EndPaint
.ELSE
push lParam
push wParam
push uMsg
push hWnd
call DefWindowProc
ret
.ENDIF
xor eax,eax
ret
push 0
call ExitProcess
WndProc endp
end start
为什么它保持断裂了吗?我已经看到同样的事情发生时,我没有把call ExitProcess
但我有这个时间,所以为什么它会继续关闭?
在此先感谢
对于缩进和格式化很抱歉。我将来会注意到这一点。 – Progrmr