关于MASM32的UNICODE中文乱码
时间:2011-03-08
来源:互联网
a.asm源代码如下:
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include kernel32.inc
include user32.inc
include ucmacros.asm
includelib kernel32.lib
includelib user32.lib
.data
WSTR szCaption, "test-测试中文"
WSTR szText, "test-测试中文"
.code
start:
invoke MessageBoxW, NULL, addr szText, addr szCaption, MB_OK
invoke ExitProcess, NULL
end start
----------------------------------
编译命令行
ml /c /coff a.asm
link /SUBSYSTEM:WINDOWS a.obj
结果看图。
MS-WinXP SP3 Pro + MASM32v10
是命令行漏了参数?还是要自己手动用API设语言?那又是哪个API?
发不了图,图在这里:zhidao.baidu.com/question/233324458.html
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include kernel32.inc
include user32.inc
include ucmacros.asm
includelib kernel32.lib
includelib user32.lib
.data
WSTR szCaption, "test-测试中文"
WSTR szText, "test-测试中文"
.code
start:
invoke MessageBoxW, NULL, addr szText, addr szCaption, MB_OK
invoke ExitProcess, NULL
end start
----------------------------------
编译命令行
ml /c /coff a.asm
link /SUBSYSTEM:WINDOWS a.obj
结果看图。
MS-WinXP SP3 Pro + MASM32v10
是命令行漏了参数?还是要自己手动用API设语言?那又是哪个API?
发不了图,图在这里:zhidao.baidu.com/question/233324458.html
作者: yunbookf 发布时间: 2011-03-08
这个 unicode 的定义,对汉字来说,是错误的吧。象上面的字符串,在 exe 文件里看,被定义成了下面的形式:
74 00 65 00-73 00 74 00-2D 00 B2 00-E2 00 CA 00 t e s t - ▓ Γ ╩
D4 00 D6 00-D0 00 CE 00-C4 00 00 00-74 00 65 00 ╘ ╓ ╨ ╬ ─ t e
73 00 74 00-2D 00 B2 00-E2 00 CA 00-D4 00 D6 00 s t - ▓ Γ ╩ ╘ ╓
D0 00 CE 00-C4 00 00 00-00 00 00 00-00 00 00 00 ╨ ╬ ─
将“测”字分解成了 B2 00 E2 00 ,这个不是“测”字的 unicode ,而只是将其 gb 码 B2 E3 简单地分解成了两个字节;其实“测”字的 unicode 应该是 6D4Bh 。
74 00 65 00-73 00 74 00-2D 00 B2 00-E2 00 CA 00 t e s t - ▓ Γ ╩
D4 00 D6 00-D0 00 CE 00-C4 00 00 00-74 00 65 00 ╘ ╓ ╨ ╬ ─ t e
73 00 74 00-2D 00 B2 00-E2 00 CA 00-D4 00 D6 00 s t - ▓ Γ ╩ ╘ ╓
D0 00 CE 00-C4 00 00 00-00 00 00 00-00 00 00 00 ╨ ╬ ─
将“测”字分解成了 B2 00 E2 00 ,这个不是“测”字的 unicode ,而只是将其 gb 码 B2 E3 简单地分解成了两个字节;其实“测”字的 unicode 应该是 6D4Bh 。
作者: zara 发布时间: 2011-03-08
试试下面这个资源里的 unicode 宏定义?它里面说是 Masm32 自带的不支持汉字,它的这个支持。
http://download.csdn.net/source/2413270
http://download.csdn.net/source/2413270
作者: zara 发布时间: 2011-03-08
不用那么麻烦,这么定义就可以了:
Assembly code
Assembly code
unicode macro name,string,zero name label byte irpc c,<string> db '&c', 0 endm ifnb <zero> dw zero endif endm ;使用方法 unicode szCaption, <test-测试中文>,0
作者: aiwnx 发布时间: 2011-03-08
引用 3 楼 aiwnx 的回复:
不用那么麻烦,这么定义就可以了:
Assembly code
unicode macro name,string,zero
name label byte
irpc c,<string>
db '&c', 0
endm
i……
不用那么麻烦,这么定义就可以了:
Assembly code
unicode macro name,string,zero
name label byte
irpc c,<string>
db '&c', 0
endm
i……
不好意思,试了一下,这种办法也不支持中文的unicode。。。
但是2#楼提供的uncode.inc文件貌似不全,无法参加编译啊
作者: aiwnx 发布时间: 2011-03-08
刚才去看了下那个资源,那个确实是不完整的。其实是下面这个资源,这个资源包括了上面那个的 unicode.inc 文件。需要留意下它的数据定义方式和 Masm 的不一样。
http://download.csdn.net/source/2821354
Assembly code
http://download.csdn.net/source/2821354
Assembly code
; 现在这样就可以了 .386 .model flat, stdcall option casemap :none ; case sensitive include windows.inc include kernel32.inc include user32.inc include macros.inc ; 这里用的是资源里的宏定义文件,不是 Masm32 的! includelib kernel32.lib includelib user32.lib .data szCaption WSTR ("test-测试中文Caption", 0) szText WSTR ("test-测试中文Text", 0) MessageBoxW PROTO :DWORD,:DWORD,:DWORD,:DWORD .code start: invoke MessageBoxW, NULL, addr szText, addr szCaption, MB_OK invoke ExitProcess, NULL end start
作者: zara 发布时间: 2011-03-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28