Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Действия с ресурсными файлами в VC++6.0

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Действия с ресурсными файлами в VC++6.0
Имя
Сообщение << Старые топики   Новые топики >>
Действия с ресурсными файлами в 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 файла вынуть и поместить в папку?
Post #: 1
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); Надеюсь будет работать, но может и не будет :)
Post #: 2
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 Гб).
 
Рад помочь хоть чуть-чуть.
Post #: 3
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

/* В файле ресурсов (имеет имя &lt;ИмяПроекта&gt;.RC или &lt;ИмяПроекта&gt;.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, &amp;factSizeHelp, NULL); WriteFile(hFilePict1, pPict1, sizePict1, &amp;factSizePict1, NULL); WriteFile(hFilePict2, pPict2, sizePict2, &amp;factSizePict2, NULL); CloseHandle(hFileHelp); CloseHandle(hFilePict1); CloseHandle(hFilePict2); FreeResource(hResourceHelp); FreeResource(hResourcePict1); FreeResource(hResourcePict2); Надеюсь будет работать, но может и не будет :)

 
Я пишу консольную программу, на ней это заработает?
Post #: 4
RE: Действия с ресурсными файлами в VC++6.0 - 2008-11-28 03:08:14.486666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Однояйцево
Post #: 5
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 - значит и в консоли попрет.
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Действия с ресурсными файлами в VC++6.0







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.