2012-04-30 5 views
4

Я использую этот код для загрузки встроенных ресурсов (растровые изображения)Сохранить внедренный ресурс в файловой системе

HRSRC hResInfo = ::FindResource(hInstance, MAKEINTRESOURCE(resourceId), RT_BITMAP); 
HGLOBAL hRes = ::LoadResource(hInstance, hResInfo); 
LPVOID memRes = ::LockResource(hRes); 
DWORD sizeRes = ::SizeofResource(hInstance, hResInfo); 

Он работает отлично.

Как я могу сохранить его в файле C: \ image.bmp?

Этот код создает только пустой файл:

HANDLE hFile = ::CreateFile(L"C:\\image.bmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
DWORD dwWritten = 0; 
::WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL); 
::CloseHandle(hFile); 



РЕШЕНИЕ:
Создание нового типа "BMP" в ресурсах и место изображения
HRSRC hResInfo = FindResource (HINSTANCE, MAKEINTRESOURCE (RESOURCEID), _T ("BMP"));

+0

Вы можете использовать класс CImage или GDI + для получения растрового кодировщика. Более практическая проблема заключается в том, что программы не могут записывать файлы в корневую папку C: без повышения UAC. Это действительно работа для установщика. –

+0

Моя программа работает с повышенными привилегиями – NieAR

ответ

3

CreateFile(), WriteFile(), и CloseHandle().

WriteFile() принимает указатель и размер, поэтому вы можете напрямую писать из заблокированного ресурса.

Смежные вопросы