C++ Can';t在Visual C+中检索资源文件数据+;

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

我正在尝试将一个.bmp文件嵌入到我的应用程序(一个简单的控制台应用程序)中,检索此文件的内容,然后将其写入磁盘上的另一个.bmp文件,只是想看看是否可以成功读取我的资源。 该项目已使用Visual Studio 2017创建:

main.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;
}
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();
}