Winapi — Как читать пользовательский ресурс в Visual C ++ 2012?

все

У меня есть источник ниже:

введите описание изображения здесь

в моем .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));

Но данные возвращают ноль.

Что я делаю неправильно?

РЕДАКТИРОВАТЬ

Мой C ++ проект — это проект dll, и я читаю файл внутри этого проекта.

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));

КСТАТИ. ничего о вашем вопросе, кроме переменной с именем гс обычно используется для RECT тип.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]