我在装配中有一件事有问题。我创建了一个变量
points db 65
。起始值为65,但是当我想在程序中使用
invoke CreateWindowEx,0,ADDR classStatic,ADDR points, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0
它返回ASCII。在此示例中,字符“A”。如何修复它以显示“65”?
答案 0 :(得分:4)
CreateWindowEx
函数期待一个C风格的字符串,它是一个指向NUL终止字符序列的指针。
你传递的内容实际上是无效输入,我很惊讶你得到了“A”而不是“A $ ^ a!束?* - @(讨厌^& +垃圾{%”。你很幸运在points
常量之后放置了0,可能是因为汇编器插入了填充。
如果要显示数字作为窗口的标题,则首先需要将该数字转换为字符串。有很多方法可以做到这一点。最简单的就是调用一个能为你完成它的函数。由于您已经链接到Win32 API,因此可以通过调用wsprintf
来逃避。更好的是,链接到C运行时库并调用snprintf
。或者,您可以编写自己的代码,将数字转换为字符串。
假设你的字符串是静态的,一个更好的方法是首先简单地使用一个字符串:
points db "65",0
(可能想要选择比points
更好的名字。)
另请注意,Windows是基于Unicode的操作系统,它通过2字节UTF-16类型实现Unicode。因此,您应始终显式调用W
- 后缀版本的Windows API函数(或定义UNICODE
和_UNICODE
符号),并且字符串字符需要为WORD大小。因此,代码将是:
strCaption dw '6','5',0
invoke CreateWindowExW,0,ADDR classStatic,ADDR strCaption, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0