|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
例程源码:编译成功,发现一个问题就是 在关闭的时候,主进程没有结束。用W32Dasm 反汇编检查了,好像没有问题。但实在想不出是哪个地方出了问题,好像是在call _WinMain之后没有返回调用 invoke ExitProcess,NULL导致,但_WinMain进程结束前都没有少ret 返回。
请鱼油们帮忙想下是哪里出了问题
- ;************first window**************
- ;copyright by yang 20160821
- ;======================================
- .386
- .model flat,stdcall
- option casemap:none
- include windows.inc
- include gdi32.inc
- includelib gdi32.lib
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- .data?
- hInstance dd ?
- hWinMain dd ?
-
- .const
- szClassName db 'MyClass',0
- szCaptionMain db 'MyWindow',0
- szText db 'This is my first Window!',0
-
-
- .code
- ;**************************************************
- ;窗口过程消息处理
- ;**************************************************
- _ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
- local @stPs:PAINTSTRUCT
- local @stRect:RECT
- local @hDc:HDC
-
- mov eax,uMsg
-
- .if eax == WM_PAINT
- invoke BeginPaint,hWnd,addr @stPs
- mov @hDc,eax
-
- invoke GetClientRect,hWnd,addr @stRect
- invoke DrawText, @hDc , addr szText,-1,\
- addr @stRect,\
- DT_SINGLELINE or DT_CENTER or DT_VCENTER
- invoke EndPaint,hWnd,addr @stPs
- .elseif eax ==WM_CLOSE
- invoke DestroyWindow,hWinMain
- invoke PostQuitMessage,NULL
- .else
- invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- ret
- .endif
- xor eax,eax
- ret
- _ProcWinMain endp
- ;*************************************************
- ;_WinMain proc
- ;*************************************************
- _WinMain proc
- local @stWndClass:WNDCLASSEX
- local @stMsg:MSG
-
- invoke GetModuleHandle,NULL
- mov hInstance,eax
-
- invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
- ;*************************************************
- ;注册窗口类
- ;*************************************************
- invoke LoadCursor,0,IDC_ARROW
- mov @stWndClass.hCursor,eax
- push hInstance
- pop @stWndClass.hInstance
- mov @stWndClass.cbSize,sizeof WNDCLASSEX
- mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
- mov @stWndClass.hbrBackground,COLOR_WINDOW+1
- mov @stWndClass.lpszClassName,offset szClassName
- mov @stWndClass.lpfnWndProc,offset _ProcWinMain ;
- invoke RegisterClassEx,addr @stWndClass
- ;****************************************************
- ;建立窗口,显示窗口
- ;****************************************************
- invoke CreateWindowEx,WS_EX_CLIENTEDGE ,\
- offset szClassName,offset szCaptionMain,\
- WS_TILEDWINDOW,0,0,300,200,NULL,NULL,hInstance,NULL
- mov hWinMain,eax
- invoke ShowWindow,hWinMain,SW_SHOWNORMAL
- invoke UpdateWindow,hWinMain
- ;*****************************************************
- ;消息循环
- ;*****************************************************
- .while TRUE
- invoke GetMessage,addr @stMsg,hWinMain,0,0
- .break .if eax == WM_QUIT
- invoke TranslateMessage,addr @stMsg
- invoke DispatchMessage,addr @stMsg
- .endw
-
- ret
- _WinMain endp
-
-
-
-
-
-
-
- start:
-
- call _WinMain
- invoke ExitProcess,NULL
-
-
-
-
-
- end start
复制代码 |
|