之前学习过win32汇编数组;还不熟悉;继续熟悉;
先做几个基本的对话框,有一个静态文本框;
定义数组之后,用 wsprintf 函数格式化,然后调用 SetDlgItemText 赋值给静态文本框;
arr1 dd 101,202,303,607,903
定义一个数组并赋初值,每个元素占4字节;
arr2 dd 3 dup(77)
定义一个数组,3个元素,每元素占4字节,每个元素初始化为77;
arr3 dd 3 dup(?)
定义数组,未初始化,将用0填充;
arr4 dd 2 dup(3 dup(7,9))
定义嵌套数组,数组值依次是:7 9 7 9 7 9 7 9 7 9 7 9,一共占 48 字节;
格式化符;
fmt1 db '%d, %d, %d, %d, %d',0dh,0ah
db '%d, %d, %d', 0dh,0ah
db '%d, %d, %d', 0dh,0ah,0
0dh,0ah 是换行; 到0结束;
本来是想4个数组的值都显示在一个静态文本框;
但是4个数组的值一起格式化的时候,总显示这个错误;
根据资料,说要分行写,
invoke wsprintf,addr szbuf,addr fmt1,arr1, arr1[4], arr1[8], arr1[12], arr1[16],\
arr2, arr2[4], arr2[8],\
arr3, arr3[4], arr3[8],\
arr4,arr4[4],arr4[8],\
arr4[12],arr4[16],arr4[20],\
arr4[24],arr4[28],arr4[32],\
arr4[36],arr4[40],arr4[44]
已经分了多行;还是报这个错;
使用2个静态文本框,把arr4的值显示在第2个静态文本框;
asm,
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
ICO_MAIN equ 1000
DLG_MAIN equ 100
IDC_INFO equ 101
IDC_INFO2 equ 102
.data
arr1 dd 101,202,303,607,903
arr2 dd 3 dup(77)
arr3 dd 3 dup(?)
arr4 dd 2 dup(3 dup(7,9))
szbuf db 500 dup(0)
.data?
hInstance dd ?
hWinMain dd ?
.const
fmt1 db '%d, %d, %d, %d, %d',0dh,0ah
db '%d, %d, %d', 0dh,0ah
db '%d, %d, %d', 0dh,0ah,0
fmt2 db '%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d', 0dh,0ah,0
.code
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax == WM_CLOSE
invoke KillTimer,hWnd,1
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
invoke wsprintf,addr szbuf,addr fmt1,arr1, arr1[4], arr1[8], arr1[12], arr1[16],\
arr2, arr2[4], arr2[8],\
arr3, arr3[4], arr3[8]
invoke SetDlgItemText,hWinMain,IDC_INFO,addr szbuf
invoke wsprintf,addr szbuf,addr fmt2,arr4,arr4[4],arr4[8],\
arr4[12],arr4[16],arr4[20],\
arr4[24],arr4[28],arr4[32],\
arr4[36],arr4[40],arr4[44]
invoke SetDlgItemText,hWinMain,IDC_INFO2,addr szbuf
.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 ICO_MAIN 1000
#define DLG_MAIN 100
#define IDC_INFO 101
#define IDC_INFO2 102
ICO_MAIN ICON "Main.ico"
DLG_MAIN DIALOG 188, 193, 140, 120
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "数组示例"
FONT 9, "宋体"
{
LTEXT "", IDC_INFO, 6, 6, 135, 65
LTEXT "", IDC_INFO2, 6, 80, 135, 45
}
结果;