БлогNot. C++ Builder: упаковываем "чужой" EXE в свой

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 [20747 просмотров]


теги: c++ программирование builder

К этой статье пока нет комментариев, Ваш будет первым