簡體   English   中英

無法在Visual C ++中檢索資源文​​件數據

[英]Can't retrieve Resource File data in Visual C++

我試圖將.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.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

Resource.rc(有趣的部分):

IDB_BITMAP1             BITMAP                  "bitmap1.bmp"

整個Resource.rchttps : //pastebin.com/tnRyg64b

但是, cout返回0,並且test.bmp是無效文件。 我想問題是我在檢索資源內容時錯過了一些東西,但是在哪里?

編輯:使用output.write(data,datasize)而不是output <<給我一個0 Ko test.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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM