Действия с ресурсными файлами в VC++6.0
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Действия с ресурсными файлами в VC++6.0 - 2008-11-27 00:48:19.450000
|
|
|
yTr42
Сообщений: 224
Оценки: 0
Присоединился: 2008-07-06 23:58:53.516666
|
Кто знает или у кого есть опыт работы с ресурсными файлами (.res) в MSVC 6.0 те что Project> Add File? Как к .программе добавить .jpeg файл а позже его уже из этого .exe файла вынуть и поместить в папку?
|
|
|
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-27 02:01:07.980000
|
|
|
tеstеr
Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
|
/* В файле ресурсов (имеет имя <ИмяПроекта>.RC или <ИмяПроекта>.RES) запиши строчки вида*/ helptext TEXT proghelp.txt /* или */ my_image1 BITMAP picture1.bmp my_image2 BITMAP picture2.jpg /* файлы proghelp.txt, picture1.bmp, picture2.jpg должны лежать рядом с файлом проекта */ В коде, например, при WM_CREATE или при другом собитии пишешь код
HGLOBAL hResourceHelp, hResourcePict1, hResourcePict2;
hResourceHelp = LoadResource(hInstance, FindResource(hInstance, "TEXT", "helptext"));
hResourcePict1 = LoadResource(hInstance, FindResource(hInstance, "BITMAP", "my_image1"));
hResourcePict2 = LoadResource(hInstance, FindResource(hInstance, "BITMAP", "my_image2"));
/* все эти hResourceHelp, hResourcePict1, hResourcePict2 - всущности обычные HANDLE, и делать с ними можно что хочешь, но для начала нужно загрузить из в память из EXE, для этого используется функция LockResource */
char *pHelpText;
BYTE *pPict1, *pPict2;
pHelpText = (char*) LockResource(hResourceHelp);
pPict1 = (BYTE*) LockResource(hResourcePict1);
pPict2 = (BYTE*) LockResource(hResourcePict2);
/* дальше создаем файлы */
HANDLE hFileHelp;
HANDLE hFilePict1;
HANDLE hFilePict2;
hFileHelp = CreateFile("testHelp.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
hFilePict1 = CreateFile("tesPict1.bmp", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
hFilePict2 = CreateFile("tesPict2.jpg", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
/* дальше записываем в файлы содержимое буфера */
DWORD factSizeHelp, factSizePict1, factSizePict2;
DWORD sizeHelp, sizePict1, sizePict2;
//размеры нужно знать, как их программно опредлить не знаю пока
//но наверняка, на основе хендлов, все вычисляется: hResourceHelp, hResourcePict1, hResourcePict2
sizeHelp = 400;
sizePict1 = 120340;
sizePict2 = 5000;
WriteFile(hFileHelp, pHelpText, sizeHelp, &factSizeHelp, NULL);
WriteFile(hFilePict1, pPict1, sizePict1, &factSizePict1, NULL);
WriteFile(hFilePict2, pPict2, sizePict2, &factSizePict2, NULL);
CloseHandle(hFileHelp);
CloseHandle(hFilePict1);
CloseHandle(hFilePict2);
FreeResource(hResourceHelp);
FreeResource(hResourcePict1);
FreeResource(hResourcePict2);
Надеюсь будет работать, но может и не будет :)
|
|
|
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-27 12:07:04.080000
|
|
|
DenischPro
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-02 14:51:17.056666
|
Размер файла можно определить так: DWORD dwSizeHelp, dwSizePict1, dwSizePict2; dwSizeHelp = GetFileSize(hFileHelp, NULL);//где NULL вместо указателя на старшие 32 бита размера, что бывает не часто(представьте файл размером больше 4 Гб). Рад помочь хоть чуть-чуть.
|
|
|
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-27 21:36:56.686666
|
|
|
yTr42
Сообщений: 224
Оценки: 0
Присоединился: 2008-07-06 23:58:53.516666
|
quote:
ORIGINAL: tеstеr /* В файле ресурсов (имеет имя <ИмяПроекта>.RC или <ИмяПроекта>.RES) запиши строчки вида*/ helptext TEXT proghelp.txt /* или */ my_image1 BITMAP picture1.bmp my_image2 BITMAP picture2.jpg /* файлы proghelp.txt, picture1.bmp, picture2.jpg должны лежать рядом с файлом проекта */ В коде, например, при WM_CREATE или при другом собитии пишешь код
HGLOBAL hResourceHelp, hResourcePict1, hResourcePict2;
hResourceHelp = LoadResource(hInstance, FindResource(hInstance, "TEXT", "helptext"));
hResourcePict1 = LoadResource(hInstance, FindResource(hInstance, "BITMAP", "my_image1"));
hResourcePict2 = LoadResource(hInstance, FindResource(hInstance, "BITMAP", "my_image2"));
/* все эти hResourceHelp, hResourcePict1, hResourcePict2 - всущности обычные HANDLE, и делать с ними можно что хочешь, но для начала нужно загрузить из в память из EXE, для этого используется функция LockResource */
char *pHelpText;
BYTE *pPict1, *pPict2;
pHelpText = (char*) LockResource(hResourceHelp);
pPict1 = (BYTE*) LockResource(hResourcePict1);
pPict2 = (BYTE*) LockResource(hResourcePict2);
/* дальше создаем файлы */
HANDLE hFileHelp;
HANDLE hFilePict1;
HANDLE hFilePict2;
hFileHelp = CreateFile("testHelp.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
hFilePict1 = CreateFile("tesPict1.bmp", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
hFilePict2 = CreateFile("tesPict2.jpg", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
/* дальше записываем в файлы содержимое буфера */
DWORD factSizeHelp, factSizePict1, factSizePict2;
DWORD sizeHelp, sizePict1, sizePict2;
//размеры нужно знать, как их программно опредлить не знаю пока
//но наверняка, на основе хендлов, все вычисляется: hResourceHelp, hResourcePict1, hResourcePict2
sizeHelp = 400;
sizePict1 = 120340;
sizePict2 = 5000;
WriteFile(hFileHelp, pHelpText, sizeHelp, &factSizeHelp, NULL);
WriteFile(hFilePict1, pPict1, sizePict1, &factSizePict1, NULL);
WriteFile(hFilePict2, pPict2, sizePict2, &factSizePict2, NULL);
CloseHandle(hFileHelp);
CloseHandle(hFilePict1);
CloseHandle(hFilePict2);
FreeResource(hResourceHelp);
FreeResource(hResourcePict1);
FreeResource(hResourcePict2);
Надеюсь будет работать, но может и не будет :) Я пишу консольную программу, на ней это заработает?
|
|
|
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-28 03:08:14.486666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Однояйцево
|
|
|
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-28 21:41:23.880000
|
|
|
tеstеr
Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
|
Заработает, вроде ничего не мешает. yTr42, сначала делай потом думай :). Ресурсы есть везде даже в консольках. Подключи файл Windows.h, - хотя это нетипично для консоли. #include <windows.h> А там уж попробуй всё это накодить. Даже события (правда консольные) в консоли можно программно обработать, ресурсы извлечь точно можно. Используемый WinAPI не требует в качестве параметров ни HWND ни hinstance - значит и в консоли попрет.
|
|
|
|
|