Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Gif из ресурса в файл

748
31 июля 2005 года
AlphaOmega
159 / / 28.09.2004
Много тем видел по поводу gif`ов, но ни одна так и не подошла. Итак...

Есть набор GIF файлов, которые я запихнул в RES файл и инклудил в проект.
Нужно перевести из ресурса в файл напрямую, минуя объекты. Что-нибудь типа *SaveFromResourceToFile*...

как это сделать?
вполне допустимо использования подобного алгоритма для бинарного соджержимого ресурса...
406
31 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AlphaOmega
Много тем видел по поводу gif`ов, но ни одна так и не подошла. Итак...

Есть набор GIF файлов, которые я запихнул в RES файл и инклудил в проект.
Нужно перевести из ресурса в файл напрямую, минуя объекты. Что-нибудь типа *SaveFromResourceToFile*...

как это сделать?
вполне допустимо использования подобного алгоритма для бинарного соджержимого ресурса...



Можно используя LoadResource наподобие
// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary("hand.exe");
if (hExe == NULL)
{
ErrorHandler("Could not load exe.");
}

// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL)
{
ErrorHandler("Could not locate dialog box.");
}

// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
ErrorHandler("Could not load dialog box.");
}

// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
ErrorHandler("Could not lock dialog box.");
}

748
31 июля 2005 года
AlphaOmega
159 / / 28.09.2004
а как его дальше-то сохранить в файл?
406
01 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AlphaOmega
а как его дальше-то сохранить в файл?



Короче вот когда то писал такую функцию которая поленостью делает что те надо,т.е. сохраняет определеннный ресурс в файл

//path - путь и имя файла куда будет ресурс сохраняться
//typeres - тип ресурса
//idRes - ID ресурса
bool MakeFileFromRes(char* path,char* typeres,char* idRes)
{
HRSRC rs=FindResource(0,idRes,typeres);
DWORD lenres=SizeofResource(0,rs);
HGLOBAL gl=LoadResource(0,rs);
LPVOID ar=LockResource(gl);
HANDLE hmut=CreateFile(path,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hmut!=INVALID_HANDLE_VALUE)
{
DWORD wr;
WriteFile(hmut,ar,lenres,&wr,0);
if(wr>=lenres){
CloseHandle(hmut);
return 1;
}
}
return 0;
}


используем так

MakeFileFromRes("C:\\my.exe","EXE",MAKEINTRESOURCE(IDR_EXE2));

с диалог боксами это было бы так:
MakeFileFromRes("C:\\my.dlg","Dialog",MAKEINTRESOURCE(IDD_DIALOG1));

748
02 августа 2005 года
AlphaOmega
159 / / 28.09.2004
Цитата:
Originally posted by vitaly2003s
Короче вот когда то писал такую функцию которая поленостью делает что те надо,т.е. сохраняет определеннный ресурс в файл

//path - путь и имя файла куда будет ресурс сохраняться
//typeres - тип ресурса
//idRes - ID ресурса
bool MakeFileFromRes(char* path,char* typeres,char* idRes)
{
HRSRC rs=FindResource(0,idRes,typeres);
DWORD lenres=SizeofResource(0,rs);
HGLOBAL gl=LoadResource(0,rs);
LPVOID ar=LockResource(gl);
HANDLE hmut=CreateFile(path,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hmut!=INVALID_HANDLE_VALUE)
{
DWORD wr;
WriteFile(hmut,ar,lenres,&wr,0);
if(wr>=lenres){
CloseHandle(hmut);
return 1;
}
}
return 0;
}


используем так

MakeFileFromRes("C:\\my.exe","EXE",MAKEINTRESOURCE(IDR_EXE2));

с диалог боксами это было бы так:
MakeFileFromRes("C:\\my.dlg","Dialog",MAKEINTRESOURCE(IDD_DIALOG1));



Первая часть кода успешно компилируется, а вот вторая - не хочет.
Что за IDR_EXE2 и DIALOG1? Как мне их задать или использовать?... на них компилятор говорит, что неизвестные символы...

406
02 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AlphaOmega
Первая часть кода успешно компилируется, а вот вторая - не хочет.
Что за IDR_EXE2 и DIALOG1? Как мне их задать или использовать?... на них компилятор говорит, что неизвестные символы...



Последние 2 строки же просто примеры с моими значениями котрых у тебя в проекте нет,ты должен в функцию MakeFileFromRes подставлять свои значения!!!

748
02 августа 2005 года
AlphaOmega
159 / / 28.09.2004
Цитата:
Originally posted by vitaly2003s
Последние 2 строки же просто примеры с моими значениями котрых у тебя в проекте нет,ты должен в функцию MakeFileFromRes подставлять свои значения!!!


Это я понял, но как мне задать эти переменные (последняя переменная). Может её в кавычки брать или как-то ещё её объявить... а то джальше компилятор не пускает.... :(

406
02 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AlphaOmega
Это я понял, но как мне задать эти переменные (последняя переменная). Может её в кавычки брать или как-то ещё её объявить... а то джальше компилятор не пускает.... :(



Я пишу в Visual Studio и никогда не пользовался Borland`ом поэтому незнаю какй эквивалент там моим id ресурсов,посмотри в свойствах твоих gifof которые уже в находятся в ресурсах у них наверное же должен быть идентификатор какой нить.
Или покажи скриншот экрана с ресурсами я псмотрю че там твориться у тебя.

748
02 августа 2005 года
AlphaOmega
159 / / 28.09.2004
Цитата:
Originally posted by vitaly2003s
Или покажи скриншот экрана с ресурсами я псмотрю че там твориться у тебя.



Вот (см.скриншот).
p.s.: пишу на Borland C++ Builder 5

406
02 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AlphaOmega
Вот (см.скриншот).
p.s.: пишу на Borland C++ Builder 5



Попробуй так для начала
MakeFileFromRes("C:\\my.gif","GIF",MAKEINTRESOURCE(DESERT));

посмотри что возвратит функция и если не будет ошибок то все ок,если нет то можно попробывать так:
MakeFileFromRes("C:\\my.gif","GIF","DESERT");

если нет то посмотри у DESERT к примеру свойства может там есть какой ID
если есть то делай так
MakeFileFromRes("C:\\my.gif","GIF",MAKEINTRESOURCE(YOUR_ID));

748
02 августа 2005 года
AlphaOmega
159 / / 28.09.2004
Вообщем попробовал я кучу вариантов и наконец-то удалось.
Вот что надо было:
MakeFileFromRes("D:\\11.gif","GIF","DESERT");
То есть без MAKEINTRESOURCE :)

Спасибо за помощь!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог