Gif из ресурса в файл
Есть набор GIF файлов, которые я запихнул в RES файл и инклудил в проект.
Нужно перевести из ресурса в файл напрямую, минуя объекты. Что-нибудь типа *SaveFromResourceToFile*...
как это сделать?
вполне допустимо использования подобного алгоритма для бинарного соджержимого ресурса...
Много тем видел по поводу 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.");
}
а как его дальше-то сохранить в файл?
Короче вот когда то писал такую функцию которая поленостью делает что те надо,т.е. сохраняет определеннный ресурс в файл
//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));
Короче вот когда то писал такую функцию которая поленостью делает что те надо,т.е. сохраняет определеннный ресурс в файл
//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? Как мне их задать или использовать?... на них компилятор говорит, что неизвестные символы...
Первая часть кода успешно компилируется, а вот вторая - не хочет.
Что за IDR_EXE2 и DIALOG1? Как мне их задать или использовать?... на них компилятор говорит, что неизвестные символы...
Последние 2 строки же просто примеры с моими значениями котрых у тебя в проекте нет,ты должен в функцию MakeFileFromRes подставлять свои значения!!!
Последние 2 строки же просто примеры с моими значениями котрых у тебя в проекте нет,ты должен в функцию MakeFileFromRes подставлять свои значения!!!
Это я понял, но как мне задать эти переменные (последняя переменная). Может её в кавычки брать или как-то ещё её объявить... а то джальше компилятор не пускает.... :(
Это я понял, но как мне задать эти переменные (последняя переменная). Может её в кавычки брать или как-то ещё её объявить... а то джальше компилятор не пускает.... :(
Я пишу в Visual Studio и никогда не пользовался Borland`ом поэтому незнаю какй эквивалент там моим id ресурсов,посмотри в свойствах твоих gifof которые уже в находятся в ресурсах у них наверное же должен быть идентификатор какой нить.
Или покажи скриншот экрана с ресурсами я псмотрю че там твориться у тебя.
Или покажи скриншот экрана с ресурсами я псмотрю че там твориться у тебя.
Вот (см.скриншот).
p.s.: пишу на Borland C++ Builder 5
Вот (см.скриншот).
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));
Вот что надо было:
MakeFileFromRes("D:\\11.gif","GIF","DESERT");
То есть без MAKEINTRESOURCE :)
Спасибо за помощь!