win32汇编1运行到GetOpenFileName总是停止运行,能弹出文件选择框,选择完就停止运行,然后程序就终止了

win32汇编一运行到GetOpenFileName总是停止运行,能弹出文件选择框,选择完就停止运行,然后程序就终止了,
.data
hInstance dd ?
hWinMain  dd ?
hMenu     dd ?
hSubMenu  dd ?
@cyChar   dd ?
@Page     dd ?
@NumLine  dd ?
@diffe    dd ?
@OldPos   dd ?
totalsize dd ?
lpMemory  dd ?
lpFileBegin dd ?

.const
szClassName db 'Menu Example',0
szCaptionMain db "******         Edit       ******",0
szMenuHelp db '帮助主题(&H)',0
szMenuAbout db '关于本程序(&A)...',0
szCaption  db '菜单选择',0
szFormat   db '您选择了菜单命令:%08x',0
szErrorO   db 'OPEN FILE DEFAT'
szError    db  'Error'
szFileName db  MAX_PATH dup (?)
szExtPe    db 'All Files(*.*)',0,'*.*',0,0
.code

_openFile proc
  local @stOF:OPENFILENAME
  local @hFile,@hMapFile
  local @bufTemp1
  local @bufTemp2
  local @dwCount
  local @dwCount1
  local @dwBlanks
  local @h
  local @hdc

 @@:
  
  invoke RtlZeroMemory,addr @stOF,sizeof @stOF

  mov @stOF.lStructSize,sizeof @stOF
  push hWinMain
  pop @stOF.hwndOwner
  mov @stOF.lpstrFilter,offset szExtPe

  mov @stOF.lpstrFile,offset szFileName
  mov @stOF.nMaxFile,MAX_PATH
  mov @stOF.Flags,OFN_PATHMUSTEXIST  or OFN_FILEMUSTEXIST
  
  invoke GetOpenFileName,addr @stOF
  
  .if !eax
  invoke MessageBox,NULL,addr szErrorO,offset szError,NULL
------解决思路----------------------
出错还是正常退出了
------解决思路----------------------
应该是奔溃了吧?  如果内存越界, 调用模式不匹配, 访问非法地址等
GetOpenFileName 后设置断点调试运行, 
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。