Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 11.04.2011, 20:45   #1
alexandersson
Новичок
Джуниор
 
Регистрация: 11.04.2011
Сообщений: 1
По умолчанию Открытие файла, предварительно загруженного в файл ресурсов Win32 приложения

добрый день уважаемые программисты!

у меня такая задача:

имеем:
— Win32 приложение на c++(vc++2008 Express);
— произвольный файл любого типа(.exe, .avi и т.д.(ресурсы, определяемые программистом)), загруженный в файл ресурсов(.rc);
— во время выполнения приложения мы из файла ресурсов получаем указатель на первый байт искомого файла
с помощью функций FindResource(), LoadResource(), LockResource();

задача:
— хороший вариант — открыть файл(или запустить на выполнение) прямо из файла ресурсов;
— не хороший, но вариант — создать на винте файл с нужным расширением и скопировать в него блок данных из файла ресурсов;

мысли вслух:
— возможно ли присвоить строковое имя неименованному блоку данных(мы имеем указатель на первый байт этих данных)?
тогда можно было бы просто открыть файл прямо из файла ресурсов с помощью ShellExecute();
— может быть есть какая-нибудь функция типа ShellExecute(), но принимающая в качестве параметра не строковый адресс файла,
а его фактический адрес в памяти?
— скопировать файл на диск у меня тоже не получилось, т.к. файловому потоку(ifstream) тоже нужен строковый адрес файла,
а копировать по байтам, так я не знаю ни точного размера, ни значения последнего байта;

кто что может посоветовать?
заранее благодарен.
alexandersson вне форума Ответить с цитированием
Старый 16.04.2011, 21:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

Цитата:
— возможно ли присвоить строковое имя неименованному блоку данных(мы имеем указатель на первый байт этих данных)?
тогда можно было бы просто открыть файл прямо из файла ресурсов с помощью ShellExecute();
exe еще более менее реально, но советую забыть, оно того не стоит.
Цитата:
— может быть есть какая-нибудь функция типа ShellExecute(), но принимающая в качестве параметра не строковый адресс файла,
а его фактический адрес в памяти?
нет, адрес относится только к вашему процессу.
Цитата:
— скопировать файл на диск у меня тоже не получилось, т.к. файловому потоку(ifstream) тоже нужен строковый адрес файла,
а копировать по байтам, так я не знаю ни точного размера, ни значения последнего байта;
1)используйте АПИ CreateFile для открытия файл
2)открывайте ресурс(как вы знаете)
3)используя SizeofResource получаем размер ресурса.
4)далее мы знаем адрес первого байта и размер ресурса.
в итоге за один вызов WriteFile мы сохраняем ресурс в файл.
5)CloseHandle для закрытия файла
6)как запустить сами знаете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка текстового файла из ресурсов SolovejK Общие вопросы Delphi 1 22.05.2010 20:18
Редактирование файла ресурсов Alex2009 Общие вопросы Delphi 4 02.07.2009 01:10
файл ресурсов Rozalinda Общие вопросы Delphi 3 20.10.2008 20:31
Файл ресурсов Stanislav Общие вопросы Delphi 11 21.11.2007 09:27


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS