2008-12-22
写给每个访问我的主页的朋友的圣诞贺卡,下载!
2008-10-19
最近的工作中碰到一个问题: 更新另一个exe文件中的字符串。本来觉得这应该是一个比较简单的问题,因为就以前的编程经验,更新其他exe文件中的资源并不是一个复杂的过程,只需要WinNT平台的支持就可以,Win9X,WinME并不支持这个过程,而且自我感觉:更新字符串还应该是更新所有类型的资源中最简单的一个。但实际操作中缺碰到了很大的问题。
开始的做法是:用MAKEINTRESOURCE转换一下需要更新的字符串ID,然后直接放到UpdateResource中调用。可没想到的是无论如何也得不到正确的结果,而函数的返回值都是正确的。阅读MSDN
LIB文档,发现对字符串类型的资源的更新提的很少,跟没有一样!到网络上搜索,中文版本的介绍非常少,最后在一个论坛的回复中得到一个链接,指向的是MS的一个演示实例,看过之后才明白更新字符串资源的做法。
与更新位图,图标等不同的是:字符串资源不是根据程序中定义的字符串ID的单个更新的,一般情况下,每16个字符串组成一个“区域”,如果我们要更新其中一个字符串的资源,那么我们需要一次更新这个“区域”,那么UpdateResource的lpName其实不是由MAKEINTRESOURCE转换的单一字符串ID,而且这个“区域”的ID,比如:如果我们要更新的单一字符串ID为130(十进制)的话,那么对应的“区域”就是1+(130%16)得到9。相应的,UpdateResource中的lpData参数就应该是这16个字符串拼接起来一组数据。
需要说明一点的是:字符串资源必须是Unicode字符串格式,而且每个字符串前面必须有一个这个字符串的长度(USHORT)类型。这一点需要我们在编程的时候特别注意。否则更新字符串还是不能得到正确结果。stablupd是MS更新字符串资源的一个演示工程,有需要的朋友可以下载研究一下,过程其实很简单,我就不给出自己的代码了,一个稍微麻烦的问题是:这个工程使用c语言写的,对习惯了c++、MFC的朋友可能稍微有点不适用,呵呵。
2008-09-05
原创空间能够重新开张,首先要感谢skyyan和www.linkbest365.com的大力支持!
重张原创空间,是为了和大家交流在C++编程中的心得和体会,我会在这里公布我写的一下类库和演示代码,同时对于在网上找到的好的免费源代码我也将推荐给大家,希望对大家有所帮助,同样的,如果大家有好的源代码愿意共享的话,也可以eMail给我,谢谢大家的分享!