首页 > 解决方案 > 如何在 Visual C++ 项目中定义和加载资源?

问题描述

下面的代码编译并运行。但是,当我调试它时,资源为 NULL,大小为零。我使用向导导入了“Resources\title.display.png”,所以我必须相信图像的路径是正确的。没有错误被抛出。这些是构成项目的三个文件。我已经把它归结为这一点,无法弄清楚出了什么问题。有什么问题吗?

样本.rc:

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (United States) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""winres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// PNG
//

IDB_PNG1                PNG                     "Resources\\title.display.png"

#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

资源.h:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by sample.rc
//
#define IDB_PNG1                        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

示例.cpp:

#include <iostream>
#include <windows.h>
#include "resource.h"

int main(int argc, char** argv)
{
    HMODULE module = GetModuleHandle(NULL);
    HRSRC resource = FindResource(NULL, MAKEINTRESOURCE(IDB_PNG1), RT_RCDATA);
    int resource_size = SizeofResource(module, resource);


    return 0;
}

标签: c++windowswinapiresources

解决方案


RT_DATA 应该是 L"PNG"。


推荐阅读