小弟初学WIN32汇编,遇到这个问题实在想不明白。显示的时间只有hour是正确的,minute是一个7位数,而second总是0(-_-),我在调试的时候发现GetLocalTime后时间都是正确的,但是调用wsprintf放在一个缓冲区后,就出错了(-_-)。还有,看资料说WIN32的API中只有wsprintf的调用方式是C,于是我就加了一行add esp, 10,但是我看《WINDOWS环境下的32位汇编》那本书第10章的例子用了wsprintf之后都没有add esp啊,而且没有出问题。我的程序中不加add esp弹出的对话框不会显示标题,不会显示缓冲区的内容(即使是错误的),甚至连确定按钮上的”OK"都没有显示(-_-),是什么原因呢?
代码如下:
.386
.model flat, stdcall
option casemap: none
include d:\masm32\include\windows.inc
include d:\masm32\include\user32.inc
include d:\masm32\include\kernel32.inc
includelib d:\masm32\lib\user32.lib
includelib d:\masm32\lib\kernel32.lib
.const
szFormat db '%d:%d:%d', 0
szTitle db 'ShowTime', 0
.data
szSysTime db 10 dup(0)
stSysTime SYSTEMTIME <>
.code
start:
invoke RtlZeroMemory, addr stSysTime, sizeof SYSTEMTIME
invoke GetLocalTime, addr stSysTime
invoke wsprintf, addr szSysTime, addr szFormat, \
stSysTime.wHour, \
stSysTime.wMinute, \
stSysTime.wSecond
add esp, 10 ;5*dword?
invoke MessageBox, NULL, addr szSysTime, addr szTitle, MB_OK
invoke ExitProcess, NULL
end start
我按你的方式改了一下,还是不对啊
汇编调用wsprintf的问题
答案:2 悬赏:30 手机版
解决时间 2021-02-06 10:14
- 提问者网友:遁入空寂
- 2021-02-05 15:39
最佳答案
- 五星知识达人网友:一秋
- 2021-02-05 16:51
嘎嘎,我在csdn上回复你了啊...
我又想了一下,
szFormat db '%d:%d:%d', 0
改成
szFormat db '%',0, 'd',0, ':',0, '%',0, d',0, ':',0, '%d',0, 0,0
估计就ok了.这样就是宽字符了.
我又想了一下,
szFormat db '%d:%d:%d', 0
改成
szFormat db '%',0, 'd',0, ':',0, '%',0, d',0, ':',0, '%d',0, 0,0
估计就ok了.这样就是宽字符了.
全部回答
- 1楼网友:迷人又混蛋
- 2021-02-05 17:36
wsprintf(缓冲区,格式,要格式化的值);
比如:
tchar buf[100];
wsprintf(buf,"%d,%d",3,3);
结果: buf的值为 "3,3"
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯