C++ Can';t在Visual C+中检索资源文件数据+;
我正在尝试将一个.bmp文件嵌入到我的应用程序(一个简单的控制台应用程序)中,检索此文件的内容,然后将其写入磁盘上的另一个.bmp文件,只是想看看是否可以成功读取我的资源。 该项目已使用Visual Studio 2017创建: main.cpp:C++ Can';t在Visual C+中检索资源文件数据+;,c++,visual-c++,embedded-resource,C++,Visual C++,Embedded Resource,我正在尝试将一个.bmp文件嵌入到我的应用程序(一个简单的控制台应用程序)中,检索此文件的内容,然后将其写入磁盘上的另一个.bmp文件,只是想看看是否可以成功读取我的资源。 该项目已使用Visual Studio 2017创建: main.cpp: #include "stdafx.h" #include "resource.h" #include <Windows.h> #include <string> #include <iostream> int m
#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;
}
Resource.rc(有趣的部分):
整个资源.rc
:
但是,cout
返回0,test.bmp
是无效文件。我想问题是我在检索资源内容时遗漏了一些东西,但是在哪里呢
编辑:
使用
output.write(data,datasize)
而不是output使用前面建议的RT\u位图。但是从锁资源
返回的数据
不是可识别的位图文件,它缺少位图文件头
您可以按如下方式制作自己的标题:
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();
}
尝试使用ofstream::write写入二进制数据,使用count=datasize,而不是运算符@AlexF,因为datasize为0,所以没有运气->这怎么可能?我将使用HRSRC hresinfo=FindResource(NULL,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP)
并立即控制hresinfo
不为空。
IDB_BITMAP1 BITMAP "bitmap1.bmp"
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();
}