Войти

Показать полную графическую версию : [решено] Как "вшить" картинку в .ЕХЕ ?


ferona
15-03-2011, 01:18
Мне нужно написать приложение при запуске которого создавалось(по указанному в исходнике пути) изображение (формата .gif). Должен быть ТОЛЬКО .exe файл. Мое изображение должно каким-то образом "вшито" в екзешник.

Пробовал копаться с ресурсами:


hRsrc = FindResource(hInstance, "myGif", RT_RCDATA);
hGlb = LoadResource(hInstance,hRsrc);
LockResource(hGlb);

... в итоге получил какой-то глобальный указатель в операт.памяти на мою картинку. Очень хорошо, а вот как теперь эту картинку скопировать, например в "C:/Program Files/myprog/images/".

Также нашел функцию: BOOL WINAPI CopyFile(...), но похоже она тоже не может мне помочь (((.

Пишу на С++ в Visual Studio 2005.

Прошу подтолкнуть в нужном направлении

Спасибо.

Admiral
15-03-2011, 01:56
ferona по глобальному указателю нужно определить размер ресурса и записать данные на диск.
Что-то вроде такого

bool bSuccess = false;
//...
BYTE *lpbArray = (BYTE*)LockResource(hGlob);
if (!lpbArray)
return bSuccess;

DWORD dwFileSize = SizeofResource(NULL, hRes);
if (!dwFileSize)
return bSuccess;

HANDLE hFile = CreateFile(ResName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_ARCHIVE, NULL);

if (hFile != INVALID_HANDLE_VALUE)
{
DWORD dwDummy;
if (WriteFile(hFile, lpbArray, dwFileSize, &dwDummy, NULL))
bSuccess = true;
CloseHandle(hFile);
}

FreeResource(hGlob);
return bSuccess;
В ResName полный путь к файлу который нужно записать.

ferona
15-03-2011, 09:43
Огромное спасибо! ))) , программу дописал благодаря вашему ответу. Проблема решена.




© OSzone.net 2001-2012