当前位置:C++技术网 > 资讯 > 资源怎么使用:5 自定义资源使用原理介绍

资源怎么使用:5 自定义资源使用原理介绍

更新时间:2015-06-24 22:20:47浏览次数:1+次

    对于有些相关的说明,使用字符串表还是不方便,直接使用文本文件编辑好,然后打包到EXE中。需要显示时,直接使用打包好的资源,非常的方便。当然此处适用于任何自定义文件资源。
    下面对打包和在程序中使用自定义资源文件进行详细介绍。


    打包自定义资源文件:
    对于资源的打包添加,请参考《资源怎么使用:添加和编辑资源》。而文本文件属于自定义的资源类型,导入资源后,需要输入一个资源类型。使用时就需要这个类型。导入后会自动生成一个类型和一个资源ID。这个ID可以修改。


    资源文件原理介绍:
    因为资源添加进去后,编译后,是将自定义文件按照二进制存放在EXE或者dll(下面统称模块)的数据段中的。要使用这个资源,首先要找到资源,使用FindResource API函数即可找到,函数的具体使用稍后介绍。找到之后,只是定位到了资源在模块的位置。因为模块是一个文件,并不是进程。所以很多数据是没有放在内存的,使用时就需要装载到内存中。比如,一个视频加密播放程序,程序就是播放器,运行程序就播放视频。这样的程序文件,主要就是视频数据。因此不可能都直接加载到内存的,而是需要的时候再装载到内存。所以这样也不难理解为什么资源的下一步是加载到内存了吧。而资源则都是在模块的数据段中存放的,使用前都要加载到内存才可使用。加载资源到内存使用API函数LoadResource。这样得到资源在内存的位置。但是这个值是一个句柄。要使用资源的数据,必须得到资源所在的内存的地址,即得到资源的指针。所以我们就需要使用API函数LockResource达到这个目的。返回的指针是void*类型的。根据需要再转换成相应的指针类型。
    特别需要注意的一点是,得到的资源是在整个资源中的一段,资源存储是在一个数据段的,所以,使用资源时一定要提供资源的长度,否则不能够正确的得到所需要的资源数据。获取资源大小使用API函数SizeofResource。
    得到资源的指针和大小后就可以将数据复制到缓冲了,然后该怎么用就怎么用了。