Build with runtime packages

Build with runtime packages

I have a query about the option in Delphi to build with or without runtime packages (Project->Option->Packages).
The executable file size seem to be smaller (389KB) when I checked the box "Build with runtime packages" compared to when I uncheck the box (3,521KB). Why is that the case?

I am having so much trouble building an installation disk for it and can’t figure out what files should be included in the installation. I wonder if this might have anything to do with it, but I have tried both options already.

5 Answers 5

When you build with runtime packages, the VCL and RTL are loaded from the packages and so their code doesn’t have to be linked into your EXE. So the EXE gets smaller, but the total installation gets larger since you can’t use smart linking to reduce the size of the packages.

As you’ve already noticed, using packages causes trouble for memory leak tracing, and it also causes trouble for debuggging. It’s generally only worthwhile to use them if you’re using plugins that will also need runtime packages.

The answers so far miss one crucial point: Runtime packages are useful in the same way as DLLs are useful if you have a suite of applications that work together and are installed together. You could of course link the VCL and third party libraries into all of them by building them without packages, but depending on the number of applications and used libraries the size of these applications combined will be larger than the size of them built with runtime packages plus the size of those runtime packages. This will make for larger setup packages, which isn’t the big issue it once was.

But using all these applications at the same time will also bring a much higher load for the system. Since every application uses its own copy of the VCL and the other libraries all these need to be loaded from disc into memory, which causes more I/O. And then there will be several copies of them in memory, each taking up space for the code. When runtime packages are used each application will have its own memory area for data, but they will all share the same copy of the packages’ code in memory.

For a single self-contained application without any special needs definitely build without packages.

Умение хорошо писать – не врожденный дар, а навык, который можно развивать, подобно многим другим. Книга, которую вы держите в руках, поможет вам приобрести необходимую уверенность и снабдит инструментами, которые понадобятся для совершенствования этого навыка.

Книга будет полезна для всех, кому приходится писать электронные письма, коммерческие предложения, отчеты, доклады и т. п.

На русском языке публикуется впервые.

Вниманию читателей представляется книга «Рассказы о математике с примерами на языках Python и C». В книге описаны различные истории или задачи, прямо или косвенно связанные с математикой (магические квадраты, простые числа и пр). Кратко рассмотрены более сложные моменты, например выполнение вычислений с помощью GPU.

Книга распространяется бесплатно, скачать оригинал в PDF можно на странице

ГЛАВА 4

  • Для чего используются пакеты
  • Использование пакетов в приложениях
  • Динамическая загрузка пакетов
  • Установка пакетов компонентов
  • Создание и редактирование пакетов
  • Структура пакета
  • Компиляция пакета

Пакеты — это специальные динамически присоединяемые компоненты (аналоги DLL — динамически компонуемых библиотек Dynamic Link Library), которые используются приложениями Delphi и IDE Delphi (о компонентах Delphi и о создании собственных компонентов читайте во второй части книги). По своему использованию пакеты делятся на:
— пакеты, загружаемые во время работы приложения (Runtime Packages), мы их будем далее называть пакетами времени выполнения. Они содержат в себе код, компоненты и используются приложением во время выполнения. Если ваше приложение ссылается на отсутствующий пакет — оно не будет работать;
— пакеты, используемые во время разработки приложения (Design time Packages), будем их называть пакетами разработки. Пакеты разработки содержат в себе компоненты, редакторы свойств, мастера и другие элементы, предназначенные для работы в среде Delphi;
— пакеты, которые могут работать как во время разработки приложения, так и во время работы приложения;
— пакеты, не являющиеся ни пакетами времени выполнения, ни пакетами разработки. Данный вид пакетов предназначен для использования их другими пакетами. На них не могут ссылаться ни приложение, ни сама среда Delphi.
Для того чтобы пакеты можно было отличить от других динамически присоединяемых библиотек, имеющих расширение DLL, для пакетов используется расширение BPL — пакет библиотеки Delphi (Borland Package Library).
Так же, как и остальные динамические библиотеки, пакеты содержат код, который может быть использован одновременно несколькими приложениями. Например, самым часто используемым пакетом Delphi 5.0 является VCL50.BPL. Когда вы создаете практически любое приложение на Delphi, вы используете этот пакет. Сама среда Delphi также использует данный па кет. При этом достаточно, чтобы в памяти компьютера находилась всего одна копия данного пакета для скольких угодно приложений, использующих VCL50.BPL. Ту же копию пакета будет использовать и сама среда Delphi.
Вы можете строить ваши приложения с использованием пакетов или без них. Но, если вы хотите включать в свое приложение самостоятельно созданные компоненты, вам придется установить пакет, используемый во время разработки приложения и содержащий данные компоненты.
В этой главе мы рассмотрим, для чего нужны пакеты, как используются пакеты в приложениях, как можно динамически загружать пакеты. Рассмотрим процедуру инсталляции пакетов компонентов. Научимся создавать новые пакеты и редактировать уже имеющиеся. Изучим общую структуру пакета.
Для чего используются пакеты
Как мы уже говорили выше, пакеты разработки необходимы для упрощения задачи распределения и установки компонентов, созданных разработчиком. Программирование с помощью пакетов разработки, по определению, имеет некоторое преимущество по сравнению с обычным программированием. Главное преимущество — сокращение размера кода. Например, все ваши приложения, включая среду программирования Delphi, могут одновременно использовать стандартные компоненты Delphi, расположенные в одном и том же пакете. Так как приложения не содержат отдельные копии библиотек компонентов, то их размер становится намного меньше. Более того, время компиляции пакетов существенно меньше, т. к. для конкретного приложения компилируется тот код, который ему необходим.
Для того чтобы приложение использовало пакеты, нужно установить флажок Build with Runtime Packages (Строить с пакетами времени выполнения) в диалоговом окне Project Options (Настройки проекта) на странице Packages (Пакеты). Для открытия этого диалогового окна выберите пункт главного меню Delphi Project/Options (Проект/Настройки). При такой компиляции приложения оно значительно сократится в размерах (примерно в 8-10 раз), но вам придется при распространении приложения передавать и все используемые приложением пакеты (включая и такой большой пакет, как VCL50.DCP, который имеет объем почти 3 Мбайт).
Рассмотрим, когда нужно использовать пакеты, а когда стандартные динамически загружаемые библиотеки Windows:
— если вы хотите использовать самостоятельно написанные компоненты в среде Delphi — создавайте пакеты. Помните, что пакеты Delphi поддерживаются только приложениями, разработанными в Delphi или Borland C++ Builder;
— если же вы хотите использовать созданную вами библиотеку различными приложениями, созданными в разных средах программирования, вам необходима динамически загружаемая библиотека (*.DLL).
Кроме рассмотренного выше расширения файла пакета BPL, с файлами пакетов связаны следующие расширения (табл. 1.4):
Таблица 1.4. Типы файлов пакетов

Читайте также:  Справка антиплагиат как сделать

Исходный файл пакета, содержащий список модулей, расположенных в пакете. Он создается при запуске редактора пакета (по своему назначению и функциональности он похож на файл проекта Delphi *.DPR)

Двоичный файл, содержащий заголовок пакета и описание всех файлов *.DCU, расположенных в пакете, включая всю символьную информацию, которая требуется для компилятора. Всего один файл данного типа создается для одного пакета

Двоичный файл, содержащий текст модуля, находящийся в пакете. Для каждого модуля создается один файл *.DCU

Файл пакета, используемого во время работы приложения. Этот файл является аналогом динамически загружаемой библиотеки (*.DLL) Windows, которая содержит специфичные характеристики среды Delphi. Если это пакет времени выполнения, то вы должны передавать данный пакет пользователю вместе с файлом приложения. В случае, если это пакет разработки, он должен распространяться среди программистов, использующих его для написания приложений

Примечание
При разработке коммерческих приложений обратите внимание на то, чтобы пользователи получили правильную версию файлов пакетов (*.BPL).

Для использования пакетов времени выполнения в вашем приложении нужно выполнить следующие шаги:
1. Загрузите или создайте новый проект в среде Delphi.
2. В главном меню Delphi выберите пункт Project/Options (Проект/Настройки).

Рис. 1.27. Вкладка Packages диалогового окна Project Options
3. В открывшемся диалоговом окне выберите вкладку Packages (Пакеты) (рис. 1.27).
4. Установите флажок Build with runtime packages (Строить с пакетами времени выполнения). Затем в открывшееся поле введите один или несколько названий пакетов, которые вы хотите использовать в своем приложении. Вы можете воспользоваться также кнопкой Add (Добавить) для поиска необходимого пакета (рис. 1.28).

Рис. 1.28. Окно добавления пакета в проект

Примечание
При изменении пути поиска (Search path) в диалоговом окне добавления пакета (рис. 1.28) вы измените глобальные настройки путей к библиотекам Delphi.

Читайте также:  Как на главную страницы браузера добавить

При ручном вводе имени пакета (в поле для редактирования без применения кнопки Add (Добавить) вам не потребуется вводить расширение пакета. Обратите внимание, что названия пакетов записываются через точку с запятой: VCL50;VCLX50;VCLSMPbO;VCLDB50;VCLAD050
Пакеты, перечисленные в поле для редактирования, при компиляции вашего приложения будут автоматически связаны с ним. Если в поле для ввода имен пакетов не будет ни одного названия пакета, ваше приложение будет откомпилировано как не использующее пакеты. В случае если один и тот же пакет будет записан в поле для редактирования несколько раз, все лишние записи будут проигнорированы.

Примечание
Вся информация об используемых приложением пакетах будет сохранена только для данного приложения. Если вы хотите, чтобы настройки сохранялись для других приложений, установите флажок Defaults (По умолчанию), находящийся в нижней части диалогового окна Project Options (Настройки проекта).

Очень важно помнить, что даже если вы используете в своем приложении пакеты, вы все равно должны прописывать имена модулей среды Delphi в блоке uses:
unit Unitl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,. Dialogs;

Имя файла пакета

Модули, входящие в пакет

Ax, Buttons, Classes, Clipbrd, Comctrls, Coraractrl, Commdlg, Comobj, Comstrs, Consts, Controls, Ddeml, Dialogs, Digs, Dsgnintf, Dsgnwnds, Editintf, Exptintf, Extctrls, Extdlgs, Fileintf, Forms, Graphics, Grids, Imm, IniFiles, Isapi, Isapi2, Istreams, Libhelp, Libintf, Lzexpand, Mapi, Mask, Math, Menu, Messages, Mmsystem, Nsapi, 01e2I, Oleconst, Olectnrs, Olectrls, Oledlg, Penwin, Printers, Proxies, Registry, Regstr, Richedit, Shellapi, Shlobj, Stdctrls, Stdvcl, Sysutils, Tlhelp32, Toolintf, Toolwin, Typinfo, Vclcom, Virtintf, Windows, Wininet, Winsock, Winspool, Winsvc

Checklst, Colorgrd, Ddeman, Filectrl, Mplayer, Outline, Tabnotbk, Tabs

Bde, Bdeconst, Bdeprov, Db, Dbcgrids, Dbclient, Dbcommon, Dbconsts, Dbctrls, Dbgrids, Dbinpreq, Dblogdlg, Dbpwdlg, Dbtables, Dsintf, Provider, Smintf

Mxarrays, Mxbutton, Mxcommon, Mxconsts, Mxdb, Mxdcube, Mxdssqry, Mxgraph, Mxgrid, Mxpivsrc, Mxqedcom, Mxqparse, Mxqryedt, Mxstore, Mxtables, Mxqvb

Qr2const, Qrabout, Qralias, Qrctrls, Qrdatasu, Qrexpbld, Qrextra, Qrprev, Qrprgres, Qrprntr, Qrqred32, Quickrpt

Arrowcha, Bubblech, Chart, Ganttch, Series, Teeconst, Teefunci, Teengine, Teeprocs, Teeshape

Areaedit, Arrowedi, Axisincr, Axmaxmin, Baredit, Brushdlg, Bubbledi, Custedit, Dbeditch, Editchar, Flineedi, Ganttedi, leditcha, Pendlg, Pieedit, Shapeedi, Teeabout, Teegally, Teelisb, Teeprevi, Teexport

Рассмотрим теперь пакеты разработки, которые поставляются вместе с Delphi 5.0 (табл. 1.6). Напомним, что данные пакеты используются IDE Delphi для установки компонентов в палитру компонентов, задания свойств компонентов и многого другого.
Таблица 1.6. Основные design-time-компоненты Delphi

Имя файла пакета

Вкладки палитры компонентов

Standard, Additional, System, Win32, Dialogs

Additional (компонент TChart)

Data Access, Data Controls

Data Access (MIDAS)

Samples (компонент IBEventAlerter)

Мастер многоязыковой поддержки

Все вышеперечисленные пакеты разработки вызывают при своей работе пакеты времени выполнения. Например, пакет DCLSTD50.BPL вызывает VCL50.BPL. Первый пакет содержит код, который позволяет делать доступ ными многие компоненты, входящие во второй пакет на палитре компонентов Delphi.
В дополнение ко всем рассмотренным выше пакетам, вы можете устанавливать в IDE пакеты собственного производства, а также пакеты, созданные другими разработчиками. Пакет Delphi DCLUSR50.BPL является стандартным контейнером для новых компонентов.
Установка пакетов компонентов
Для того чтобы установить собственные пакеты или пакеты, созданные другими разработчиками, вам нужно выполнить следующие шаги:
1. В случае, когда вы устанавливаете новый пакет, скопируйте файлы пакета в директорию библиотеки Delphi. Убедитесь, что скопировали все необходимые файлы пакета (имеющие расширения BPL, DCP, DCU). Если вы устанавливаете файл пакета с расширением DCP (Delphi Package Collection), то вам не нужно копировать никакие другие файлы, т. к. DCP-файл содержит внутри себя все файлы пакета.
2. В главном меню Delphi выберите команду Component/Install Packages (Компонент/Установить пакеты), либо воспользуйтесь вкладкой Packages (Пакеты) в диалоговом окне свойств проекта, вызываемого командой главного меню Delphi Project/Options (Проект/Настройки) (рис. 1.29).

Рис. 1.29. Окно просмотра компонентов, входящих в пакет
3. В вызванном диалоговом окне вы можете видеть список всех доступных пакетов. Для установки любого пакета, имеющегося в списке, поставьте флажок напротив наименования пакета. Для удаления пакета из проекта уберите флажок напротив наименования пакета. Для просмотра компонентов, входящих в пакет, щелкните мышью на имени пакета и нажмите кнопку Components (Компоненты). На рис. 1.29 показан список компонентов, входящих в состав пакета Borland ADO DB Components.
4. Для добавления нового пакета в список нажмите кнопку Add (Добавить) и в открывшемся окне выберите файл пакета. При выборе файла пакета, имеющего расширение DPC, появляется диалоговое окно для обработки процесса извлечения файлов пакета из файла коллекции пакета (*.DPC).
5. Чтобы удалить пакет из списка, выберите пакет и нажмите кнопку Remove (Удалить).
Компоненты пакета устанавливаются на вкладки палитры компонентов Delphi.
Создание и редактирование пакетов
Процесс создания пакета включает в себя: — задание названия пакета;
— указание списка других пакетов, связанных с новым пакетом или требуемых для его работы;
— составление списка файлов модулей, содержащихся в пакете или связанных с ним. По существу, пакет является лишь оболочкой для этих файлов.

Читайте также:  Как вычислить дифференциал функции

Рис. 1.30. Щелкните на значке Package, чтобы создать новый пакет
Для создания пакета вам необходимо выполнить перечисленные ниже шаги:

Примечание
Для хорошего понимания перечисленных ниже шагов вам нужно ознакомиться со структурой пакета. Структура пакета рассматривается в следующем разделе.

1. Выберите в главном меню Delphi команду File/New (Файл/Новый). В появившемся диалоговом окне выберите значок Package (Пакет) (рис. 1.30). Сгенерированный пакет будет отображен в редакторе пакета (рис. 1.31).
Редактор пакета отображает два раздела: содержания (Contains) и требований (Requires).

Рис. 1.31. Редактор пакета
2. Для добавления нового модуля в раздел Contains (Содержание) выберите этот раздел, затем щелкните на кнопке Add (Добавить) редактора пакета. Появится диалоговое окно Add (Добавление) (рис. 1.32).
На странице Add Unit (Добавление модуля) диалогового окна Add (Добавление) запишите в поле имени файла модуля имя файла *.PAS, который вы хотите включить в пакет, либо воспользуйтесь кнопкой Browse (Обзор) для непосредственного указания файла. В результате, выбранный файл модуля будет добавлен в раздел contains вашего пакета.
Можете повторить вышеперечисленные действия для добавления дополнительных модулей в пакет.

Рис. 1.32. Диалоговое окно добавления нового модуля раздела Contains пакета
3. Для добавления пакетов в раздел Requires выберите этот раздел щелчком мыши, затем нажмите кнопку Add (Добавить) редактора пакета.
В появившемся диалоговом окне (рис. 1.33) в поле имени пакета (Package Name) впишите имя файла пакета (*.DCP), требуемого для работы вашего пакета. Вы также можете использовать кнопку Browse (Обзор) для непосредственного указания файла пакета. Повторяя данный шаг, вы можете добавить несколько файлов пакетов в раздел Requires вашего пакета.

Рис. 1.33. Диалоговое окно добавления нового модуля раздела Requires пакета
4. Для выбора типа создаваемого пакета (runtime или design-time) щелкните на кнопке Options (Настройки) редактора пакета. Откроется диалоговое окно Project Options (Настройки проекта) (рис. 1,34).
5. Теперь выберите нужный тип пакета, выбором переключателя в разделе Usage Options (Параметры использования).
6. Последний шаг — компиляция созданного пакета. Нажмите кнопку Compile (Компилировать) редактора пакета.
Редактировать уже существующий файл пакета можно по-разному:
— выбрать пункт главного меню Delphi File/Open (Файл/Открыть) и найти файл пакета, который необходимо редактировать;
— выбрать пункт главного меню Delphi Component/Install Component (Компонент/Установить компонент), выделить нужный пакет в списке пакетов и нажать кнопку Edit (Правка);
— в открытом редакторе пакета выбрать в разделе Requires (Требования) нужный пакет, щелкнуть на нем правой кнопкой мыши для появления контекстного меню, где выбрать пункт Open (Открыть).

Project > Options > Packages > Runtime Packages

Use this page to specify the run-time packages required by your project.

Target, Apply, Save

Link with runtime packages

Dynamically links the run-time packages in your project.

Default = True for C++, False for Delphi.

Runtime packages
(Delphi)

Runtime package import libraries
(C++)

Determines the run-time packages to use when the executable file is created. To view and edit the list of run-time packages, click the ellipsis button. (Make sure that the Target configuration field is set to the build configuration from which the list is inherited.)

The dialog box displays additional lists of the run-time packages that are associated with different configuration and platform combinations, such as these default values:

As packages are installed and uninstalled, the run-time package list is updated. The product automatically adds run-time packages that are required by installed design-time packages.

Ellipsis button

Displays the Runtime packages dialog box, allowing you to add, replace, or delete run-time packages. This dialog box is an dialog box.

Ссылка на основную публикацию
Adblock
detector