【问题标题】:How to read user-defined resource in Visual C++ 2012?如何在 Visual C++ 2012 中读取用户定义的资源?
【发布时间】:2023-03-27 17:16:01
【问题描述】:

全部

我有以下来源:

在我的 .rc 文件中

IDR_XML1                XML                     "LoginQuery.xml"

在我的 resource.h 文件中

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
//

#define IDR_XML1                        106

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        107
#define _APS_NEXT_COMMAND_VALUE         40002
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

在我的 .cpp 文件中。

HMODULE handle = ::GetModuleHandle(NULL);
HRSRC rc = ::FindResource(handle, MAKEINTRESOURCE(IDR_XML1), MAKEINTRESOURCE("XML"));
HGLOBAL rcData = ::LoadResource(handle, rc);
DWORD size = ::SizeofResource(handle, rc);
const char* data = static_cast<const char*>(::LockResource(rcData));

但是数据返回null。

我做错了什么?

编辑

我的 C++ 项目是 dll 项目,我正在读取该项目内的文件。

【问题讨论】:

  • 用简单的"XML" 替换MAKEINTRESOURCE("XML")MAKEINTRESOURCE 期望 int 作为其参数,因此得名。
  • 另外,你需要传递一个正确的模块句柄——即HINSTANCE句柄传递给DllMainGetModuleHandle(NULL) 为您提供托管 EXE 的句柄(当然,它没有该资源)。

标签: c++ winapi visual-c++ visual-studio-2012 embedded-resource


【解决方案1】:

您的 dll 条目类似于:

BOOL WINAPI DllMain(_In_  HINSTANCE hinstDLL, _In_  DWORD fdwReason, _In_  LPVOID lpvReserved)

hinstDLL 是您的 dll 的实例,我建议使用全局变量来保留此实例并在 dll 加载后立即分配它。

HINSTANCE g_hInstance;
BOOL WINAPI DllMain(_In_  HINSTANCE hinstDLL, _In_  DWORD fdwReason, _In_  LPVOID lpvReserved)
{
    g_hInstance = hinstDLL;
    /*code*/
}

你的资源负载应该是这样的:

HRSRC rc = ::FindResource(g_hInstance, MAKEINTRESOURCE(IDR_XML1), MAKEINTRESOURCE(XML));
HGLOBAL rcData = ::LoadResource(g_hInstance, rc);
DWORD size = ::SizeofResource(g_hInstance, rc);
const char* data = static_cast<const char*>(::LockResource(rcData));

顺便说一句。与您的问题无关,但名为 rc 的变量通常用于 RECT 类型。

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2013-07-22
    相关资源
    最近更新 更多