Delphi 6 размещение нескольких файлов внутри единственного исполняемого файла.

Подготовка файла res.res содержащего вложенные файлы

В данном примере я буду размещать внутри приложения Delphi 6 другой исполняемый EXE файл, который по нажатию кнопки из основного приложения будет сохранён в папку с изначально запускаемым файлов, а затем запущен. В примере в качестве вложенного файла я буду использовать файл с названием tubeNoob3.exe(это одна из моих предыдущих программ на Delphi 6).

С помощью блокнота создадим файл res.rc в котором напишем FILEEXE FILES tubeNoob3.exe

Теперь создадим файл bat.bat в котором с помощью блокнота напишем brcc32.exe res.rc

В папку с только что созданными двумя файлами скопируем файл который должен будет содержаться внутри основного приложения на Delphi 6, в моём случаи это tubeNoob3.exe теперь можно запустить файл bat.bat в результате в папке с тремя файлами должен появиться файл res.res который мы далее переместим в папку с проектом Delphi.

Чтобы не создавать указанные выше 2 файла вручную я заархивировал их, и Вы можете просто их исправить.

Если в результате запуска bat файла файл res.res не создался, возможно Вы не перезапустили компьютер после установки Delphi. В своей работе bat файл использует 2 других файла, а именно brcc32.exe и rw32core.dll оба они находятся по адресу C:\Program Files\Borland\Delphi6\Bin поэтому чтобы создать файл res.res без перезагрузки Windows скопируйте их в папку с bat файлом а затем попробуйте ещё раз запустить bat файл.

Разработка основной программы в которую вкладываем файлы

Если Вы собираетесь не только сохранять вложенные файлы при работе основной программы но и запускать их, то в uses необходимо добавить модуль ShellApi(для работы ShellApi.ShellExecute то есть для запуска извлечённого файла, если Вы не планируете запускать файл на выполнение, а просто планируете извлеч из res-файла, то подключать этот модуль не требуется).

Чтобы при компиляции Delphi видела файл res.res его необходимо разместить в папке с проектом а так же добавить в implementation строчку {$R res.res}.

Теперь создадим процедуру ExtractRes которая будет при обращении к ней сохранять вложенный в программу файл с папке с основной программой, я не буду показывать отдельный листинг процедуры так как в её теле всего 2 строчки, просто найдите её в общем листинге программы ниже в данной статье.

Теперь создадим событие при клике на кнопку в котором для начала выполним нашу только что созданную процедуру, а именно код ExtractRes('FILES', 'FILEEXE','tubeNoob3.exe'); а затем запустим вложенный файл программы на исполнение кодом ShellApi.ShellExecute(handle,'open',PAnsiChar('tubeNoob3.exe'),'','',sw_show);

Полный листинг получившейся основной программы

Функция для извлечения файла из Res с подтверждением успешности выполнения

Если Вы точно хотите быть уверены что файл был успешно извлечён и размещён в требуемой папке процедуру ExtractRes можно заменить кодом функции из следующего листинга, которая будет возвращать true в случаи успешного извлечения файла или false при ошибке, например если у Вас нет прав на запись в директорию.

В листинге ниже функция которая записывает информацию из файла находящегося в res в массив байт, который в фнкцию передаётся 3-им параметром.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: