Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Как "вшить" картинку в .ЕХЕ ? (http://forum.oszone.net/showthread.php?t=202026)

ferona 15-03-2011 01:18 1635055

Как "вшить" картинку в .ЕХЕ ?
 
Мне нужно написать приложение при запуске которого создавалось(по указанному в исходнике пути) изображение (формата .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 1635069

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 1635187

Огромное спасибо! ))) , программу дописал благодаря вашему ответу. Проблема решена.


Время: 20:20.

Время: 20:20.
© OSzone.net 2001-