Как прочесть запись из себя ?
который при необходимости можно будет прочитать и записать в нужную дирректорию.
В 7 студии я заметил что можно добавить в ресурсы файл (как бит мап) но как прочитать его оттуда ?
Может ктото знает нужный метод ?
_
Мне нужно написать програмку которая внутри своей exe "тушки" будет содержать небольшой файл
который при необходимости можно будет прочитать и записать в нужную дирректорию.
В 7 студии я заметил что можно добавить в ресурсы файл (как бит мап) но как прочитать его оттуда ?
Может ктото знает нужный метод ?
_
LoadBitmap(...) Если не ошибаюсь... Там в параметрах Указывается ID ресурса...
LoadBitmap(...) Если не ошибаюсь... Там в параметрах Указывается ID ресурса...
Мне это не очень подходит так как мне нужно получить
указатель на начало вписанного файла и
прочитать его от начала до конца.
(Да там есть ещё вариант Accelerator который
вроде точно также вписывет в проэкт файл.)
А тут ещё одна проблема появилась.
Мне нужно создать скрытую папку.
Я пытался сделать так:
if(!CreateDirectory("a:\\resf",0))
{...}
CFileStatus status;
CFile::GetStatus("c:\\resf",status);
status.m_attribute=0x2;
CFile::SetStatus("c:\\resf",status);
Но получил отказ в доступе.
Может есть способ лучше ?
и причем тут Bitmap и Accelerator, но, так или
иначе, любые данные можно записать в ресурсы как
"custom" ресурс и получить указатель на начало
данных с помощью FindResource, LoadResource и
LockResource...
Я пытался сделать так:
if(!CreateDirectory("a:\\resf",0))
{...}
CFileStatus status;
CFile::GetStatus("c:\\resf",status);
status.m_attribute=0x2;
CFile::SetStatus("c:\\resf",status);
Но получил отказ в доступе.
Может есть способ лучше ?
Наверное:
status.m_mtime=0;
(см MSDN),
скорее всего, лучше:
status.m_attribute|=0x2;
хотя, то что у тебя, почему-то работает...:)
ну и создаешь на a:\, атрибуты меняешь на c:\
Может быть, не до конца понимаю, о чем тут речь,
и причем тут Bitmap и Accelerator, но, так или
иначе, любые данные можно записать в ресурсы как
"custom" ресурс и получить указатель на начало
данных с помощью FindResource, LoadResource и
LockResource...
Ты всё правильно понимаеш :)
Я попытался разобраться с этими функциями
но в MSDN так ничего умного (кроме примера который компелятор послал подальше )
не нашол.
Можеш привести небольшой пример загрузки и чтения ресурса ?
За ранее благодарен.
Можеш привести небольшой пример загрузки и чтения ресурса ?
За ранее благодарен.
void* FindAndLock(LPCTSTR rsname,LPCTSTR rstype,HINSTANCE hmodule=0)
{
HRSRC mhdrc=FindResource(hmodule,rsname,rstype);
if(!mhdrc)
return 0;
HGLOBAL mhtmpl=LoadResource(hmodule,mhdrc);
if(!mhtmpl)
return 0;
return LockResource(mhtmpl);
}
void fn()
{
BYTE* p_myBytes=(BYTE*)FindAndLock(
MAKEINTRESOURCE(ID_OF_MY_RESOURCE)/* or it's name*/,"ResourceOfMyOwnType");
//maybe:
my_CFile.Write(p_myBytes,lengthOfData);
//.....
}
void* FindAndLock(LPCTSTR rsname,LPCTSTR rstype,HINSTANCE hmodule=0)
{
HRSRC mhdrc=FindResource(hmodule,rsname,rstype);
if(!mhdrc)
return 0;
HGLOBAL mhtmpl=LoadResource(hmodule,mhdrc);
if(!mhtmpl)
return 0;
return LockResource(mhtmpl);
}
void fn()
{
BYTE* p_myBytes=(BYTE*)FindAndLock(
MAKEINTRESOURCE(ID_OF_MY_RESOURCE)/* or it's name*/,"ResourceOfMyOwnType");
//maybe:
my_CFile.Write(p_myBytes,lengthOfData);
//.....
}
Спасибо большое за пример.
Но всёже не понятно с параметрами для FindAndLock.
Допустим я создаю прогу с именем bigbug.exe
В её ресурсы я засунул файл first.dmt и он
получил идентификатор IDR_FIRST.
Куда что вставлять чтобы bigbug.exe смогла
прочитать из себя first.dmt и записать его в
p_myBytes ?
HMODULE hModule, // module handle
LPCTSTR lpName, // resource name
LPCTSTR lpType // resource type
);
hModule- "module handle" - если ресурс в .exe,
то можно 0 (или GetModuleHandle(0)), если в .dll,
то то, что получится после LoadLibrary (если не ноль :)).
lpName - MAKEINTRESOURCE(IDR_FIRST) в данном сл.,
если имя было бы строкой, то нужно было бы оно.
lpType-имя типа ресурса (или MAKEINTRESOURCE, если
используешь идентификатор), т.е. если ты создаешь "custom"
resource, то VS тебя попросит как нибудь его обозвать (напр "FIRST", или ввести целое, тогда будет числовой идентификатор), это имя и нужно; для стандартных ресурсов есть стандартные идентификаторы типа (RT_ACCELERATOR,RT_BITMAP,...)
меньше было бы "из пустого в порожнее"...
(см private message)