Win32创建一个窗口的源代码,怎么编译不成功
.386 ;使用386指令集
.model flat,stdcall;将所有段的寻址方式设置为平坦方式,堆栈平衡方式设置为stdcall
option casemap:none ;设置为大小写敏感
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
.data
ModuleHandle dd ? ;保存模块句柄
WinHandle dd ? ;保存窗口句柄
.const
WindowsClassName db 'FirstWindow',0
WindowsTitleName db 'Fuck Sister',0
.code
_WinProc proc uses ebx ebp esi edi,Hwnd,Message,varam,lparam;窗口过程
mov eax,Message
.if eax==WM_CLOSE
invoke DestroyWindow,WinHandle ;销毁窗口
invoke PostQuitMessage,NULL;向消息队列传送一个销毁消息.让系统做出释放内存等操作
xor eax,eax
ret
.endif
invoke DefWindowProc,Hwnd,Message,varam,lparam
ret
_WinProc endp
_Createwindow proc
local @stWindowclass:WNDCLASSEX ;建立一个窗口类的结果变量
local @stMeg:MSG ;建立一个取GetMessage取出的消息保存的结构变量
invoke RtlZeroMemory,addr @stWindowclass,sizeof @stWindowclass ;使用新创建的结构变量之前先清零
mov @stWindowclass.cbSize,sizeof @stWindowclass
mov @stWindowclass.style,CS_HREDRAW or CS_VREDERAW or CS_DBLCLKS
mov @stWindowclass.lpfnWndProc,offset _WinProc
invoke GetModuleHandle,NULL
mov ModuleHandle,eax
mov @stWindowclass.hInstance,eax
invoke LoadIcon,NULL,IDI_WARNING
mov @stWindowclass.hIcon,eax ;程序图标设置成叹号
mov @stWindowclass.hcursor,eax ;程序鼠标形状设置成叹号
mov @stWindowclass.hbrBackground,COLOR_WINDOW+1
mov @stWindowclass.lpszClassName,offset WindowsClassName
;***************注册窗口类
invoke RegisterClassEx,addr @stWindowclass;注册窗口类
;***************建立窗口类
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset WindowsClassName,offset WindowsTitleName,WS_OVERLAPPEDWINDOW,100,200,400,600,NULL,NULL,ModuleHandle,NULL
mov WinHandle,eax
;***************显示窗口
invoke ShowWindow,WinHandle,SW_RESTORE
invoke UpdateWindow,WinHandle
;***************进入无限制的消息循环
while TRUE
invoke PeekMessage,addr @stMeg,WinHandle,0,0,PM_REMOVE
.if eax ;判断eax如果非0则进入循环,因为如果eax=0则证明消息队列中没有消息所以无需做任何处理
.break .if @stMeg.Message==WM_QUIT;如果所取到的消息为销毁则跳出循环
invoke DispatchMessage,addr @stMeg
.endif
endw
ret
_Createwindow endp
start:call _Createwindow
invoke ExitProcess,NULL
end start