由于MASM32中Dialog.inc文件中ustring宏有问题,导致用对话框相关的宏显示含有中文的对话框时出问题。原代码如下所示:
; ------------------------------------------------ ; write unicode string at current location in EDI ; ------------------------------------------------ ustring MACRO quoted_text LOCAL asc_txt .data asc_txt db quoted_text,0 .code invoke MultiByteToWideChar,CP_ACP,MB_PRECOMPOSED, ADDR asc_txt,-1,edi,LENGTHOF asc_txt add edi, LENGTHOF asc_txt*2 ENDM
修改为以下后正常:
; ------------------------------------------------ ; write unicode string at current location in EDI ; ------------------------------------------------ ustring MACRO quoted_text LOCAL asc_txt,dwMinSize .data asc_txt db quoted_text,0 dwMinSize dd 0 .code invoke MultiByteToWideChar,CP_ACP,0, ADDR asc_txt,-1,0,0 mov dwMinSize,eax invoke MultiByteToWideChar,CP_ACP,MB_PRECOMPOSED, ADDR asc_txt,-1,edi,dwMinSize add edi, dwMinSize add edi, dwMinSize ENDM
原理参见MSDN库中关于MultiByteToWideChar函数用法相关的资料。