可以是太心急,原提问无法刷新啦,只得再次开问,还请各位大侠鼎力帮助啊。
如何在VB设计中枚举.res文件中的资源,即读取.res文件中资源的ID、Name、size。急啊,困挠了近月吧啦……
如何在VB设计中枚举.res文件中的资源,即读取.res文件中资源的ID、Name、size。急啊,困挠了近月吧啦……
解决方案 »
- vb6里面怎么同步运行函数
- 程序在编译状态下运行后再中断就直接退出,不能返回到原编译环境下?为什么
- msflexgrid的问题
- 有关DTS的一个问题,初来乍到,请大家赐教!
- 在进行SQL查询的时候,对象refresh的方法iadodc失败
- 求教一下关于数据报表的问题!(较多)
- 高分请教DataReport打印问题:我打印的报表比较大ReportWidth=18000左右,但最大好像只能达到12000,怎么办?
- 问题请教!
- set datagrid.datasource=rs 怎么是错的
- 请问:怎样才能隐藏程序,不显示在系统的关闭窗口里???
- 新手请教:如何用vb2008编程实现自动提交表单
- vb richtextbox 搜索问题
http://www.ex-designz.net/apidetail.asp?api_id=614
网上可以查找xn_resourceeditor_source3.0.0.1的源代码,可惜是delphi编写的,我看不懂。谁能帮我把核心部分转为VB吗?先谢了!
本人邮箱:[email protected]
源代码地址:www.quxp.com
如果只是把资源数据的结构分解出来,倒不算难。MSDN([http://msdn.microsoft.com/en-us/library/ms648027(VS.85).aspx][/url])已经说得很清楚。
基本上:struct RESOURCEHEADER {
DWORD DataSize;
DWORD HeaderSize;
[Ordinal or name TYPE];
[Ordinal or name NAME];
DWORD DataVersion;
WORD MemoryFlags;
WORD LanguageId;
DWORD Version;
DWORD Characteristics;
};
改为VB就是:
Type RESOURCEHEADER {
DataSize as Long
HeaderSize as Long
ResType as Variant ' [Ordinal or name TYPE];
ResName as Variant '需要说明的就是这里的Type和Name,有可能是一个字符串,也有可能是一个双字节整型,所以用Variant[Ordinal or name NAME];
DataVersion as Long
MemoryFlags as Integer
LanguageId as Integer
Version as Long
Characteristics as Long
ResData() as Byte '这是具体的数据,可以留给后续处理时使用,仅当DataSize<>0时才有
End Type 读取的时候,可以直接读取八个字节到DataSize+HeaderSize其中HeaderSize是包括DataSize和HeadSize在内的整个资源描述头的占用字节数,当这个HeaderSize确定之后,自然就可以根据DataSize读取具体的数据住处到ResData(读入前记得ReDim,仅当DataSize不为“零”时处理),剩余的就是下一段的数据的,可以不用理会接着就是ResType和ResName的处理.先假定整个头部的信息为ResHead,那么前面已经处理了八个字节,接下来就从第九个字节开始处理,如果第9+第10个字节合起来为一个字(Word),可以直接Copy到Integer类型当中,如果其值为&hFFFF(一个无效的Unicode字)相当于-1(Integer),则后面接着的两个字节就是一个数字,即ResType为两个字节的数值(具体代表是什么资源可以自己查MSDN:http://msdn.microsoft.com/en-us/library/ms648009(VS.85).aspx),如果第9和第10个字节合起来不是&hFFFF,则表示ResType是了个Unicode字串,那么就两个字节两个字节的查,直到为0(Integer),假字第11和12字节合起来是0值,则9和10组成了一个Unicode字,只时只需要使用一个string变量分配一个字节,比如StrResType = space(1),然后再通过CopyMemory复制两个字节到StrResType当中,就取得了ResType,把11和12这个0值抛弃,(提示:请记录从第9个字节开始已经处理了多少个字节,比如记作nResType,后面还有用)。接着是ResName的处理,处理方法跟ResType一样,同样的也要记录处理了多少字节,记作nResName计算nResType+nResName 模(mod)上4,如果不为0(只能是2),则继续抛弃2个字节,否则不需要继续往下。后面就非常简单了,DataVersion要四个字节,MemoryFlags要两个字节,LanguageId要两个字节,Version要四个字节,Characteristics要四个字节。如此一段资源就分解完了。数据部分则要根据ResType去处理,如果是系统预定义的类型,则参考具体的资源结构进行分解和处理。但是有些结构是用户自定义的,你就只能把它当二进制数据读取出来。当然,如果其中是二进制文件资源的话,比如PE文件(包括.exe或.dll等)可以通过检测PE文件的格式来确定。一口气写了这么多,希望对需要的朋友有些帮助。
http://hi.baidu.com/rarnu/blog/item/619ed02a32e7cf99023bf6ed.html
以上两个网页上都有列出资源的代码,不过开发语言是delphi。
代码也不算长,如果API函数中有下列3个函数,相信同时会delphi和VB语言的朋友改写不用多长时间就可以完成吧?
unitResourceGraphics
unitResourceDetails
unitResourceMessages
可是我在MSDN中并没有,谁能给介绍一下么?
http://code.google.com/p/zgameeditor/source/browse/trunk/tools/?r=7#tools/ZDesigner/3rdparty
看来诸位高手都是有思路的,只是……。难怪中国软件上不了台阶--感慨而已,并不针对某人,不要对号入座。
目前我已经把VB放在一旁了,我想我得学学delphi。高手不愿意做的事情,也总得有人做啊。
希望有心人在我还没有学完delphi之前完成它,唉——悲哀——中国IT
在单位里,只要有人问我问题,我总是知无不言,言无不尽;有问题自己解决不了的,常常是整宿整宿的捉摸,爬网。我不认为我是一位单纯地想吃“免费午费”的人。有前辈认为现时社会多数人懒惰、不好学,自己固守自己。“各尽各力,社会总是在进步的。”作为先行者带动大家向前,自己不也荣耀吗?我希望向所有人学习——包括趾高气昂的人,他们之所以这样,自然有这样的理由。只希望他们不要封闭。
随便问一下:有几个没有用过盗版软件?没有用过?番茄花园这么火——火得微软都把它“疯”掉了——我就想不通了。