网上铺天盖地的帖子都是说VB中loadresdata(),loadresstring(),……这些个函数的,完全都是说怎样在VB里头读取资源的事,我们都知道VB支持String,Icon,Cursor,BitMap,CUSTOM等几类Win32 标准资源。
   使用的时候用VB中的资源编辑器,将标准资源保存到其中,然后就是用前面提到的那几个函数变着戏法的调用,觉得这样很有意思似的。崩溃!
    我想解决的问题是如何向一个EXE文件中写入资源,或者把这个EXE文件中之前含有的标准资源替换掉,这个功能有点类似于资源修改工具,例如exeScope、ResHacker等,这个肯定要用到API的,查了一下,相关的API有:
BeginUpdateResource(),UpdateResource(),EndUpdateResource(),很好理解他们的功能,先打开资源文件句柄准备更新资源,更新资源,关闭句柄。

   一切似乎都已经解决了!

   其实,问题才刚刚开始,那就是不管我怎么调用这几个API,出来都不是我要的结果。

   首先,没有找到资料它能更新字符串表格资源,还有icon、Cursor等资源,唯一能正确更新的就是VB中“独有”的CUSTOM资源,问题也就出在这里了!

   我先做了个含有一个自定义资源的VB文件,资源为一个文本("我不是个随便的人,我随便起来不是人!")用form的caption来显示!


运行结果
点击在新窗口中浏览此图片
编译生成后的文件取名为target.exe,放到d盘根目录!
下面再来弄个主程序来对它进行资源写入!


写入显示是成功的!可当我迫不及待的打开target.exe的时候,其标题并没有改变!!!晕~

而当我用resHacker打开target.exe的时候……

点击在新窗口中浏览此图片

在reshacker中出现了两个101,怎么可能同一类的资源可以有两个相同的ID??

后来解决了这个问题,就是将原target代码的
LoadResData(101, "CUSTOM"),改成LoadResData("101", "CUSTOM"),就可以正常调用我们写入的资源!

虽然解决了小问题,可是,我怎么才能修改原来的那个ID为101的资源啊!

令我不爽也就是在这里,标识怎么成字符串了呢?(更新了,更新了,我在后来的一篇文章里解决了此问题VB操纵标准资源的一点补充
天气情况 04/26/2007 13:40, gently, Visual Basic, 评论(3), 阅读(2173)
vzxcz Email
01/15/2008 11:20
怎样修改当前的VB应用程序的资源文件呢?
这个API好你不行
gently 回复于 01/15/2008 20:15
好我不行?你是什么性别?要不咱俩比试比试
test
01/09/2008 09:36
UpdateResource hRes, "CUSTOM", 101, 2052, myStr(0), Len(Text1.Text)

根据声明API的参数类型,上面这一句中的参数有问题,101处应该是字符串,所以才会有错误的结果。按照你的写法,程序自动将其转换成了字符串"101"。
gently 回复于 01/09/2008 18:57
谢谢兄弟的指点,我在后来的一篇文章
http://www.zendstudio.net/post/23/中解决了这个问题,当时也确实弄不明白,API是个奇怪的东西~
hehe
10/29/2007 07:10
佩服你的??精神,?!
分页: 1/1 第一页 1 最后页
发表评论
开启/隐藏 高级扩展
昵称
密码  游客无需密码
网址
电邮   [注册]