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

Ваш аккаунт

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

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

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

Как прочесть запись из себя ?

1.2K
30 июля 2004 года
BigBug
93 / / 30.07.2004
Мне нужно написать програмку которая внутри своей exe "тушки" будет содержать небольшой файл
который при необходимости можно будет прочитать и записать в нужную дирректорию.
В 7 студии я заметил что можно добавить в ресурсы файл (как бит мап) но как прочитать его оттуда ?
Может ктото знает нужный метод ?
_
492
30 июля 2004 года
alibabaich
238 / / 08.07.2004
Цитата:
Originally posted by BigBug
Мне нужно написать програмку которая внутри своей exe "тушки" будет содержать небольшой файл
который при необходимости можно будет прочитать и записать в нужную дирректорию.
В 7 студии я заметил что можно добавить в ресурсы файл (как бит мап) но как прочитать его оттуда ?
Может ктото знает нужный метод ?
_


LoadBitmap(...) Если не ошибаюсь... Там в параметрах Указывается ID ресурса...

1.2K
31 июля 2004 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by alibabaich

LoadBitmap(...) Если не ошибаюсь... Там в параметрах Указывается ID ресурса...



Мне это не очень подходит так как мне нужно получить
указатель на начало вписанного файла и
прочитать его от начала до конца.
(Да там есть ещё вариант Accelerator который
вроде точно также вписывет в проэкт файл.)

А тут ещё одна проблема появилась.
Мне нужно создать скрытую папку.
Я пытался сделать так:

if(!CreateDirectory("a:\\resf",0))
{...}
CFileStatus status;
CFile::GetStatus("c:\\resf",status);
status.m_attribute=0x2;
CFile::SetStatus("c:\\resf",status);

Но получил отказ в доступе.
Может есть способ лучше ?

430
31 июля 2004 года
craftyfox
157 / / 20.02.2000
Может быть, не до конца понимаю, о чем тут речь,
и причем тут Bitmap и Accelerator, но, так или
иначе, любые данные можно записать в ресурсы как
"custom" ресурс и получить указатель на начало
данных с помощью FindResource, LoadResource и
LockResource...
430
31 июля 2004 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by BigBug


Я пытался сделать так:

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:\

1.2K
02 августа 2004 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by craftyfox
Может быть, не до конца понимаю, о чем тут речь,
и причем тут Bitmap и Accelerator, но, так или
иначе, любые данные можно записать в ресурсы как
"custom" ресурс и получить указатель на начало
данных с помощью FindResource, LoadResource и
LockResource...



Ты всё правильно понимаеш :)

Я попытался разобраться с этими функциями
но в MSDN так ничего умного (кроме примера который компелятор послал подальше )
не нашол.
Можеш привести небольшой пример загрузки и чтения ресурса ?
За ранее благодарен.

430
02 августа 2004 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by BigBug


Можеш привести небольшой пример загрузки и чтения ресурса ?
За ранее благодарен.



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);
//.....
}

1.2K
03 августа 2004 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by craftyfox


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 ?

430
03 августа 2004 года
craftyfox
157 / / 20.02.2000
HRSRC FindResource(
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,...)
430
03 августа 2004 года
craftyfox
157 / / 20.02.2000
запостил бы сразу пример, пусть некомпилящийся,
меньше было бы "из пустого в порожнее"...
(см private message)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог