luqingfei@C++

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

Win32汇编--使用资源--二进制资源与自定义资源

 

Win32汇编--使用资源--二进制资源与自定义资源

 

1、使用二进制资源

DOSexe文件可以带一个覆盖部分,覆盖部分实际上就是在真正的可执行部分后面附加的数据,然后由程序在运行中打开自身文件并使用这些数据。Win32的可执行文件中除了上面介绍的这些标准类型的资源外,也可以在程序中附带其他数据,当然方法完全不同——Win32资源中允许用户自己定义二进制的资源或者自定义格式的资源,资源的内容可以是任何数据,也可以将一个磁盘文件按二进制格式包括进去。

 

二进制资源的定义格式是:

资源ID REDATA [DISCARDABLE]

BEGIN

              数据定义

             

END

 

也可以用一个磁盘文件当做资源的内容:

资源ID RCDATA [DISCARDABLE] 文件名

 

在程序中要使用资源的内容时,可以通过以下步骤将资源装入内存使用:

1)用FindResource(hInstance, lpName, lpType)查找资源。lpName的值为资源IDlpType的值为RT_RCDATA,如果找到资源。那么函数返回一个资源信息句柄。

2)用LoadResource(hInstance, hResInfo)装入资源。hResInfo是上一步中得到的资源信息句柄,装入成功的话函数会返回一个资源句柄。

3)用LckResource(hResData)将资源锁定到内存中。hResData是上一步得到的资源句柄,函数返回资源装入的内存地址,程序就可以使用内存中的数据了。

4)如果想知道装入资源的大小是多少,可以使用FindResource返回的hResInfo来调用SizeofResource(hInstance, hResInfo)从而得到资源大小。

 

下面是一个装入资源IDID_MYRESRCDATA类型资源的例子:

invoke FindResource, hInstance, ID_MYRES, RT_RCDATA ;寻找资源

.if eax

mov hResInfo, eax

invoke SizeofResource, hInstance, eax        ;获取资源尺寸

mov dwResSize, eax

invoke LoadResource, hInstance, hResInfo ;装入资源

.if eax

    invoke LockResource, eax   ;锁定资源

    .if eax

        mov lpRes, eax

        ;处理lpRes指向的资源内容

    .endif

.endif

.endif

 

2、使用自定义资源

自定义资源的定义格式比二进制资源更灵活,它和二进制资源的区别在于可以指定资源类别为自定义的名称:

资源ID 类型ID [DISCARDABLE]

BEGIN

              数据定义

             

END

 

或用一个磁盘文件当做资源的内容:

资源ID 类型ID [DISCARDABLE] 文件名

 

 

类型ID可以是大于255的数值(255及以下的数值由Windows使用)或字符串,如可以定义如下:

1000   WAVE   “Hello.wav”   ;定义类型为“WAVE”,资源ID1000的资源

1000   TEXT    “Readme.txt” ;定义类型为“TEXT”,资源ID1000的资源

1000   1000     “Test.bin”     ;定义类型为1000,资源ID1000的资源

 

在程序中使用自定义资源的方法和使用二进制资源类似,唯一的区别是使用FindResource得到hResInfo的参数有些区别,得到hResInfo以后的步骤是一模一样的。针对上面3句定义,查找资源的方法可以是:

szResType1        db       “WAVE”,0

szResType2        db       “TEXT”,0

invoke FindResource, hInstance, 1000, addr szResType1 ;针对上面第一句

invoke FindResource, hInstance, 1000, addr szResType2 ;针对上面第二句

invoke FindResource, hInstance, 1000, 1000            ;针对上面第三句

 

在使用完二进制或自定义资源以后,不必使用任何函数去释放它们,Windows在程序退出的时候会自动将它们释放。

 

posted on 2010-09-21 16:16 luqingfei 阅读(898) 评论(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

大牛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜