无法在可视C++中检索资源文件数据
Can't retrieve Resource File data in Visual C++
我正在尝试将.bmp文件嵌入到我的应用程序(一个简单的控制台应用程序(中,检索该文件的内容,然后将其写入磁盘上的另一个.bmp,只是为了看看我是否可以成功读取我的资源。 该项目是使用 Visual Studio 2017 创建的:
主要.cpp :
#include "stdafx.h"
#include "resource.h"
#include <Windows.h>
#include <string>
#include <iostream>
int main()
{
HRSRC hresinfo = FindResource(NULL, MAKEINTRESOURCE(IDB_BITMAP1), _T("BITMAP"));
HGLOBAL hRes = LoadResource(NULL, hresinfo);
LPVOID data = LockResource(hRes);
DWORD datasize = SizeofResource(NULL, hresinfo);
std::cout << datasize;
ofstream output("test.bmp", std::ios::binary);
output << data;
output.close();
return 0;
}
资源.h:
//{{NO_DEPENDENCIES}}
// Include file Microsoft Visual C++.
// Used by Resource.rc
//
#define IDB_BITMAP1 101
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
资源.rc(有趣的部分(:
IDB_BITMAP1 BITMAP "bitmap1.bmp"
整个Resource.rc
: https://pastebin.com/tnRyg64b
但是,cout
返回 0 ,并且test.bmp
是一个无效文件。我想问题是我在检索资源内容时错过了一些东西,但是在哪里?
编辑: 使用output.write(data,datasize)
而不是output <<
给了我一个 0 Ko 测试.bmp(而不是 1Ko(
按照前面的建议使用RT_BITMAP
。但是从LockResource
返回data
不是可识别的位图文件,它缺少位图文件头。
您可以制作自己的标头,如下所示:
HRSRC hresinfo = FindResource(NULL, MAKEINTRESOURCE(IDB_BITMAP1), RT_BITMAP);
if(hresinfo)
{
HGLOBAL hRes = LoadResource(NULL, hresinfo);
LPVOID data = LockResource(hRes);
DWORD datasize = SizeofResource(NULL, hresinfo);
ofstream output("test.bmp", std::ios::binary);
BITMAPFILEHEADER bfh = { 'MB', 54 + datasize, 0, 0, 54 };
output.write((char*)&bfh, sizeof(bfh));
output.write((char*)data, datasize);
output.close();
}
相关文章:
- 具有瞬态资源的RAII类
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 使用VerQueryValue检索应用程序的文件描述
- 允许从 std::map 的密钥窃取资源?
- 参考资源文件VC++中的$(SolutionDir)
- 是否可以从格式字符串中检索"width"
- 如何维护资源管理器项目视图中当前可见的项目列表
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用RAII在给定次数的迭代后重新分配资源
- 资源管理设计模式
- 如何跨平台将二进制资源构建到程序中?
- SetDlgItemInt 不会更改嵌入资源的编辑框
- Klocwork Inside的资源泄漏
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 无法在可视C++中检索资源文件数据
- 检索 Windows 资源管理器的地址栏编辑控件的句柄
- 正在资源管理器中检索菜单
- 检索关闭的窗口资源管理器窗口的通知