程序一运行就崩溃

柴西卡夫卡 2011-07-01 12:24:58


.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib


DLG_MAIN EQU 1000
IDC_COUNTER EQU 1001

IDC_PAUSE EQU 1002

.data?
hInstance dd ?
hWinMain dd ?
hWinCount dd ?
hWinPause dd ?

dwOption dd ? ;标志位
F_PAUSE EQU 0001h
F_STOP EQU 0002h
F_COUNTING EQU 0004h ;计算中
.const
szStop db '停止计数',0
szStart db '计数',0

.code
_Counter proc uses ebx esi edi _lParam

or dwOption,F_COUNTING
and dwOption,not (F_STOP OR F_PAUSE)
invoke SetWindowText,hWinCount,addr szStop
invoke EnableWindow,hWinPause,TRUE

xor ebx,ebx
.while ! (dwOption & F_STOP)
.if !(dwOption & F_PAUSE)
inc ebx
invoke SetDlgItemInt,hWinMain,IDC_COUNTER,ebx,FALSE
.endif
.endw

invoke SetWindowText,hWinCount,addr szStart
invoke EnableWindow,hWinPause,FALSE
and dwOption,not (F_COUNTING OR F_STOP OR F_PAUSE)

ret

_Counter endp

_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

LOCAL @dwThreadID

mov eax,wMsg
.if eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
.if dwOption & F_COUNTING
or dwOption,F_STOP
.else
invoke CreateThread,NULL,0,offset _Counter,NULL,NULL,@dwThreadID
invoke CloseHandle,eax
.endif
.elseif ax == IDC_PAUSE
xor dwOption,F_PAUSE
.endif
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke GetDlgItem,hWnd,IDOK
mov hWinCount,eax
invoke GetDlgItem,hWnd,IDC_PAUSE
mov hWinPause,eax
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

_ProcDlgMain endp

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start



.rc

#include <resource.h>
#define DLG_MAIN 1000
#define IDC_COUNTER 1001
#define IDC_PAUSE 1002

DLG_MAIN DIALOGEX 10,10,237,111
CAPTION "计数"
FONT 8,"MS Sans Serif",0,0,0
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
BEGIN
CONTROL "",IDC_COUNTER,"Edit",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,33,21,78,18,WS_EX_CLIENTEDGE
CONTROL "计数",IDOK,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,36,63,60,24
CONTROL "暂停/恢复",IDC_PAUSE,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,126,63,60,24
END


一点计数就崩溃,不知是哪的问题呢?
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zara 的回复:]
invoke CreateThread,NULL,0,offset _Counter,NULL,NULL,addr @dwThreadID ;
[/Quote]

++

要传递的是@wThreadID的指针
zara 2011-07-01
  • 打赏
  • 举报
回复
invoke CreateThread,NULL,0,offset _Counter,NULL,NULL,addr @dwThreadID ;

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧