C++ Builder: упаковываем "чужой" EXE в свой
Иногда удобнее скрыто добавить чужую утилитку в свою программу и запускать её оттуда, чем изобретать велосипеды. В качестве примера слинкуем приложение со стандартным калькулятором Windows.
Любым текстовым редактором создадим в папке проекта файл с именем a.rc
и следующим содержимым:
MYEXE EXEFILE calc.exeЭта строка формата
"Имя_ресурса Тип_ресурса Имя_программы"
полностью идентифицирует ресурс, а именно - программу calc.exe
, которую можно будет "спрятать" в ресурсах нашего приложения.
Найдём в своей Windows файл стандартного калькулятора (в папке Windows\system32
) и скопируем его в папку проекта.
Присоединяем ресурс к проекту: меню Project, Add To Project..., выбираем файл a.rc
По любому удобному событию, например, нажатию кнопки, запрограммируем запуск калькулятора:
char *ResType = "EXEFILE"; TResourceStream* ResPtr = new TResourceStream((int)HInstance, "MYEXE", ResType); ResPtr->SaveToFile("calc.exe"); ShellExecute(Handle,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL); //Запускаем калькулятор delete ResPtr;
По событию OnClose
формы приложения предусмотрим удаление "распакованного" файла.
Для простоты здесь не контролируется, было ли удаление успешным:
if (FileExists("calc.exe")) try { DeleteFile ("calc.exe"); } catch (...) {} Action = caFree;
После тестовой сборки проекта файл calc.exe
можно удалить из папки приложения, его копия осталась в ресурсах.
P.S. Насколько помню, описанное было актуально для классического Borland C++ Builder 6. Если что-то из этого нужно и сейчас - вот более подробный файл.
Управление компонентами и ресурсами приложения в Borland C++ Builder 6, файл Word 2007 или выше (94 Кб)
12.11.2013, 20:46 [21011 просмотров]