luqingfei@C++

为中华之崛起而崛起!
兼听则明,偏听则暗。

Win32汇编--使用资源--字符串资源

 

Win32汇编--使用资源--字符串资源

 

程序中用到的字符串常常定义在.const字段中,但Windows也提供了另外一种使用字符串常量的方法,那就是在资源中定义。虽然在资源中定义字符串使用起来比直接在.const段中定义要复杂一点,但它带来的好处是便于开发不同语言的版本,比如,要推出其他语种的版本只需要修改资源中的字符串表就可以了,即使语言转换的工作是由第三方通过修改可执行文件来做的(如编程受好者常常做的汉化工作),修改资源也远比修改代码来得快捷和安全。

 

在资源脚本中定义字符串的语法是:

STRINGTABLE [DISCARDABLE]

BEGIN

       字符串ID1    字符串1”

       字符串ID2    字符串2”

      

END

 

全部字符串组成一个字符串表,和其他资源定义不同,由于整个资源文件中只能定义一个字符串表,所以字符串表没有资源ID,但是表中的不同字符串分别有一个字符串ID

 

在程序中使用字符串资源也很简单,用LoadString把字符串装入到缓冲区中去就可以用了:

       invoke LoadString, hInstance, 字符串ID, addr 缓冲区, sizeof 缓冲区

 

为了防止溢出,最后一个参数指定缓冲区的长度。

如果要在单个可执行文件中实现多语种,那么可以在字符串表中定义不同语言的字符串。同一语种的字符串按规律排列,如下列中文的以1000开头,英文的以2000开头:

stringtable

{

       1001       文件未找到!

       1002       无法打开文件!

      

       2001       “File not found!”

       2002       “Can not open file”

      

}

 

在程序中使用的时候,先确定一种语言并预先设置在dwLanguage变量中,使用中文时将dwLanguage设置为1000,使用英文时设置为2000,再写一个读取不同版本字符串的子程序_GetString,这样调用_GetString子程序后就不用考虑版本问题了:

_GetString      proc        _dwID, _lpBuffer, _dwSize

                     pushad

                     mov        eax, _dwID

                     invoke     LoadString, hInstance, eax, _lpBuffer, _dwSize

                     popad

                     ret

_GetString      endp

 

 

 

posted on 2010-09-20 10:12 luqingfei 阅读(860) 评论(0)  编辑 收藏 引用 所属分类: Win32汇编程语言序设计


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

留言簿(6)

随笔分类(109)

随笔档案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜