首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

关于资源文件使用字符串表的有关问题

2012-09-06 
关于资源文件使用字符串表的问题C/C++ codeLANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIEDSTRINGTABL

关于资源文件使用字符串表的问题

C/C++ code
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIEDSTRINGTABLE{    STR_LANGUAGE                "Chinese Simplified"        STR_WELCOME                 "図書館員:已启动"    STR_START                   "図書館員:任务已开始"    STR_RUNNING                 "図書館員:当前任务尚未结束"}

由于要在简体中文和繁体中文的机器上均能正常显示,于是rc文件使用的是UNICODE编码
但是编译完成后试着去载入
Assembly code
invoke    LoadStringW,hInstance,STR_WELCOME,addr @lpString,0        ;缓冲区大小为0时@lpString里放置资源节中该字符串的地址invoke    SendMessageW,hStatus,SB_SETTEXTW,0,@lpString

给出的显示是连续的"図書館員:已启动 図書館員:任务已开始 図書館員:当前任务尚未结束"而不是单独的字符串

00D9765A F3 56 F8 66 28 99 E1 54 3A 00 F2 5D 2F 54 A8 52 図書館員:已启动
00D9766A 0A 00 F3 56 F8 66 28 99 E1 54 3A 00 FB 4E A1 52 .図書館員:任务
00D9767A F2 5D 00 5F CB 59 0D 00 F3 56 F8 66 28 99 E1 54 已开始.図書館員
00D9768A 3A 00 53 5F 4D 52 FB 4E A1 52 1A 5C 2A 67 D3 7E :当前任务尚未结
00D9769A 5F 67 00 00 束.

用OD查看后,发现本应该为0000h的两处均不为0,使得字符串没有被截断
所以说这到底是怎么回事啊...rc是Win7SDK中自带的版本



[解决办法]
这两处红色的是后续字符串的长度(unicode 格式的字符个数,即 *2 才是字节数)吧,不是所谓的应该是 0000 表示字符串结束的标记。使用资源的话,LoadStringW() 会自动在字符串末尾加上 0000 的;如果是自己处理资源的话,就得自己做了;或者,在定义字符串时,最后主动地、额外地加上 \0 字符?

热点排行