【发布时间】: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句柄传递给DllMain。GetModuleHandle(NULL)为您提供托管 EXE 的句柄(当然,它没有该资源)。
标签: c++ winapi visual-c++ visual-studio-2012 embedded-resource