当咱们修复Windows哄骗方法时,世俗会触及到使用资源(Resource)的情况。资源不错包括图标、位图、字符串等,它们以二进制神志镶嵌到可实行文献中。在某些情况下,咱们可能需要从可实行文献中索要自界说资源并保存为独处的文献。在这篇博客著作中,咱们将有计划怎样使用C++和WinAPI结束这个指标。最初,让咱们探究一个场景:咱们有一个 Windows 哄骗方法,其中包含了一个自界说的二进制资源比如默许的树立文献制服诱惑,咱们但愿将这个资源索要出来并保存为一个独处的文献以用于运周折方法树立项。为了结束这个指标,咱们不错使用`Windows API`提供的关系函数,来完成对资源的开释责任。
当咱们修复Windows哄骗方法时,世俗会触及到使用资源(Resource)的情况。资源不错包括图标、位图、字符串等,它们以二进制神志镶嵌到可实行文献中。在某些情况下,咱们可能需要从可实行文献中索要自界说资源并保存为独处的文献。在这篇博客著作中,咱们将有计划怎样使用C++和WinAPI结束这个指标。
简介最初,让咱们探究一个场景:咱们有一个 Windows 哄骗方法,其中包含了一个自界说的二进制资源比如默许的树立文献,咱们但愿将这个资源索要出来并保存为一个独处的文献以用于运周折方法树立项。为了结束这个指标,咱们不错使用Windows API提供的关系函数,来完成对资源的开释责任。
要道函数空洞GetModuleHandle
该函数用于取得指定模块的句柄。模块不错是一个可实行文献(举例 .exe 文献)或一个动态连结库(举例 .dll 文献)。该函数复返指定模块的实例句柄,以便在后续的操作中使用。
以下是 GetModuleHandle 函数的一般神志:
参数融会:
lpModuleName:指定要取得句柄的模块的称呼。淌若为 NULL,则复返调用线程的可实行模块句柄。
在许厚情况下,GetModuleHandle 主要用于取稳健前进度的模块句柄,以便在后续的操作中使用该句柄。模块句柄世俗用于在进度中查找资源、定位函数地址等目标。
FindResource
该函数用于定位并复返指定模块(世俗是 .exe 或 .dll 文献)中的资源。资源不错是诸如位图、图标、对话框模板、字符串等等的数据。
以下是 FindResource 函数的一般神志:
参数融会:
hModule:指定包含资源的模块的句柄。淌若为 NULL,则暗示使用刻下可实行模块的句柄。lpName:指定资源的称呼或秀气符。不错是字符串或整数秀气符。lpType:指定资源的类型。世俗是一个字符串,如 "RT_BITMAP" 暗示位图资源。淌若找到,则复返指向资源的句柄(HRSRC)。这个句柄不错用于后续的资源加载和操作,函数的第二个参数世俗相助MAKEINTRESOURCE一齐使用,MAKEINTRESOURCE 是一个宏(macro),用于将整数秀气符(ID)退换为字符串指针。在 Windows 编程中,世俗用于秀气资源的 ID。
这个宏收受一个整数参数 i,然后将其退换为字符串指针。在资源秀气符落魄文中,世俗将整数秀气符退换为字符串是为了在使用关系资源函数时传递正确的参数。
举个例子,淌若有一个字符串资源的秀气符是 IDR_MYSTRING,则不错使用 MAKEINTRESOURCE 将其退换为字符串:
在这里制服诱惑,pszResourceName 将指向字符串 "IDR_MYSTRING"。
在前边提到的 FindResource 中,世俗将 MAKEINTRESOURCE(IDR_MYSTRING) 算作 lpName 参数传递给 FindResource。这是因为 FindResource 函数期许资源称呼是字符串类型,而 IDR_MYSTRING 可能是一个整数秀气符。通过使用 MAKEINTRESOURCE,则不错将整数秀气符退换为字符串,以便正确地在资源中查找。
SizeofResource
该函数用于取得指定资源的大小。它复返资源的字节数,不错用于笃定加载资源所需的内存大小。
以下是 SizeofResource 函数的一般神志:
参数融会:
hModule:指定包含资源的模块的句柄。淌若为 NULL,则暗示使用刻下可实行模块的句柄。hResInfo:指定资源的句柄,世俗由 FindResource 复返。SizeofResource 复返资源的大小,以字节为单元。这个函数在加载资源之前不错用来分派实足的内存空间。
LoadResource
该函数用于加载指定资源的数据。该函数复返一个全局内存块的句柄,该内存块包含了资源的实质数据,你不错通过 LockResource 函数取得该内存块的指针来造访资源数据。
以下是 LoadResource 函数的一般神志:
参数融会:
hModule:指定包含资源的模块的句柄。淌若为 NULL,则暗示使用刻下可实行模块的句柄。hResInfo:指定资源的句柄,世俗由 FindResource 复返。LoadResource 用于将资源数据加载到全局内存块中,并复返该内存块的句柄。在加载资源后,不错使用 LockResource 函数取得指向资源数据的指针。
性感少妇LockResource
用于取得指定资源的数据指针。它收受一个全局内存块的句柄,该内存块世俗由 LoadResource 函数复返,然后复返一个指向资源数据的指针。
以下是 LockResource 函数的一般神志:
参数融会:
hResData:指定资源数据的全局内存块句柄,世俗由 LoadResource 函数复返。
LockResource 用于锁定指定资源的全局内存块,并复返指向资源数据的指针。请防范,这个函数实质上并乌有行拷贝,而是复返指向内存块的指针,因此对复返指针的任何修改齐会平直影响到内存块本人。
FreeResource
用于开释由 LoadResource 函数加载的资源。这个函数世俗用于开释不再需要的资源,以看守资源表露。
以下是 FreeResource 函数的一般神志:
参数融会:
hResData:指定要开释的全局内存块句柄,世俗由 LoadResource 函数复返。FreeResource 用于开释之前由 LoadResource 加载的资源。请防范,这个函数世俗在资源的生命周期终局时调用,以确保开释资源占用的内存。但在实质哄骗中,当代 Windows 哄骗世俗不需要显式调用 FreeResource,因为 Windows 会在方法退出时自动开释资源。
在实质的哄骗方法中,FindResource 不错与 LoadResource 和 LockResource 等函数一齐使用,用于加载和操作资源数据。当数据资源被加载到内存之后则不错平直通过fwrite函数将其平直写出到磁盘中,以此来结束开释资源的目标。
代码功能结束最初新建一个驱散台方法以算作本次的测试环境,接着准备好咱们需要写出的数据,这里就准备一个lyshark.ini树立文献,在状貌中右键选拔添加并添加资源,此时会弹出如下图所示的请示信息;
此时会弹出添加资源菜单,通过点击导入按钮并输入资源类型为LYSHARK点击笃定保存这个改换,如下图所示;
此时咱们在主方法中引入#include "resource.h"包含资泉源文献,并修改FindResource中的特定位置使其指向咱们导入的树立文献,在开释时相似需要保捏fopen("map\\lyshark.ini", "wb+")树立文献的方法。
这段资源开释的齐全代码如下所示;
以责罚员模式运行上述方法,并恭候,此时会开释一个目次并包含一个树立文献,如下图所示的输出后果;
通过以上的代码结束,咱们得手地将自界说资源索要并保存为一个独处的文献。这种时候在一些突出情况下可能会很灵验,举例需要动态加载或替换资源的情况。但愿这篇博客对你交融怎样使用 C++ 和 Windows API 进行资源操作有所匡助。
到此这篇对于C/C++ 结束动态资源文献开释的著作就先容到这了制服诱惑,更多关系C++ 动态资源文献开释内容请搜索剧本之家昔时的著作或不时浏览底下的关系著作但愿人人以后多多支撑剧本之家!