mrjbom
@mrjbom

Как получить hmodule ресурса?

Вообще я пытаюсь выгрузить jpg картинку из ресурсов своей программы своей программы, она хранится не в dll, а в exe.
Вот код
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include "resource.h"

using namespace std;

int main()
{
	//hmodule
	HRSRC jpg_resource = FindResource(NULL, (LPCWSTR)IDR_JPG1, L"JPG");
	if (!jpg_resource)
	{
		DWORD err;
		GetLastError();
	}
	cout << "HRSRC = " << jpg_resource << "\n";
	HGLOBAL load_resource = LoadResource(NULL, jpg_resource);
	if (!load_resource)
	{
		DWORD err;
		GetLastError();
	}
	cout << "HGLOBAL = " << load_resource << "\n";
	HANDLE load_image = LoadImage(NULL, L"from_exe.jpg", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
	if (!load_image)
	{
		DWORD err;
		GetLastError();
	}
	cout << "HANDLE = " << load_image << "\n"; //всё время выводил 0
	return 0;
}
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Надергал из своего старого проекта вызовов для чтения ресурса.
Правда у меня ресурсы были текстовые, но суть от этого не меняется.
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hResInfo = FindResourceA(hModule, MAKEINTRESOURCEA(IDR_README1), MAKEINTRESOURCEA(READMETXT));
HGLOBAL hResource = LoadResource(hModule, hResInfo);
DWORD nSize = SizeofResource(hModule, hResInfo);
LPVOID resource = LockResource(hResource);

После LockResource получаете указатель на байтовый массив вашего ресурса, дальше делайте с ним что хотите.
В примере IDR_README1 и READMETXT - идентификатор ресурса из rc файла.
Вызовы расположены в реальном порядке, как есть в проекте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы