永发信息网

汇编调用wsprintf的问题

答案:2  悬赏:30  手机版
解决时间 2021-02-06 10:14
  • 提问者网友:遁入空寂
  • 2021-02-05 15:39
小弟初学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

我按你的方式改了一下,还是不对啊
最佳答案
  • 五星知识达人网友:一秋
  • 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了.这样就是宽字符了.
全部回答
  • 1楼网友:迷人又混蛋
  • 2021-02-05 17:36

wsprintf(缓冲区,格式,要格式化的值);

比如:

tchar buf[100];

wsprintf(buf,"%d,%d",3,3);

结果: buf的值为 "3,3"

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯