FindResource详解
#include <iostream>
#include <Windows.h>
int main() {
// 获取当前模块的句柄
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hRes = ::FindResource(hModule, MAKEINTRESOURCE(1), RT_MANIFEST);
if (hRes == NULL) {
std::cerr << "无法找到清单文件资源。" << std::endl;
return 1;
}
// 加载资源到内存中
HGLOBAL hResLoad = LoadResource(hModule, hRes);
if (hResLoad == NULL) {
std::cerr << "无法加载清单文件资源。" << std::endl;
return 1;
}
// 锁定资源,获取资源数据的指针
LPVOID pResLock = LockResource(hResLoad);
if (pResLock == NULL) {
std::cerr << "无法锁定清单文件资源。" << std::endl;
return 1;
}
// 获取资源的大小
DWORD resSize = SizeofResource(hModule, hRes);
if (resSize == 0) {
std::cerr << "无法获取清单文件资源大小。" << std::endl;
return 1;
}
// 将清单文件内容打印到控制台
std::cout.write(static_cast<const char*>(pResLock), resSize);
return 0;
}
上面的代码是获取可执行程序的清单并打印,下面结合资源结构分析
HRSRC hRes = ::FindResource(hModule, MAKEINTRESOURCE(1), RT_MANIFEST);
看到只需要两层标识就可以定位到想要的资源
第一层 资源的类型
RT_MANIFEST
就是ID号24
第二层 资源的名称或ID号
MAKEINTRESOURCE(1)
,这里是ID: 1
可以看到资源结构中还有第三层,ID:1033,但是第三层貌似只会有一个目录,所以就不用指定了
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/18527027
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端