gpt4 book ai didi

c++ - 如何在 Visual C++ 2012 中读取用户定义的资源?

转载 作者:行者123 更新时间:2023-11-30 02:47:44 30 4
gpt4 key购买 nike

全部

我有以下来源:

enter image description here

在我的 .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工程,正在读取工程里面的文件。

最佳答案

您的 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 类型。

关于c++ - 如何在 Visual C++ 2012 中读取用户定义的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548937/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com