Проекти Логінова Дмитра
Все, що тут написано, стосується однаково як Delphi, і Builder. Надалі слово Builder не згадуватиметься.
Пакети в Delphi - це ті ж DLL-бібліотеки, які мають великі можливості. Це чудовий засіб для зберігання процедур, функцій, класів. Пакети, на відміну DLL-бібліотек, займають набагато менше місця на жорсткому диску. Ви можете розкидати функціональність програми по окремих пакетах, в результаті чого ваш exe-файл займатиме всього кілька десятків кілобайт.
- Пакети можна використовувати тільки в рамках Delphi, причому пакет повинен бути скомпільований в тій же версії Delphi, в якій він використовуватиметься надалі.
- При використанні пакетів необхідно вкладати в дистрибутив програми всі пакети, на які посилається пакет, що розробляється. В результаті розмір дистрибутива може збільшитись на кілька мегабайт. Програма установки повинна встановлювати всі стандартні пакети в системну директорію (наприклад, C:\Windows\System). Файли для стандартних пакетів зазвичай називаються таким чином: ++ (наприклад, vcl70.bpl)
- Стандартні пакети досить важкі. Навіть якщо ви використовуєте лише одну функцію з пакету vcl70.bpl, то він все одно повністю вантажиться в оперативну пам'ять. В результаті ваша програма стане від'їдати оперативності як мінімум на 3 Мбайта більше, ніж без використання пакетів.
- Пакет займає менше місця, ніж DLL. Класичний приклад - зберігання форм у DLL. Застосовується у плагінах. Кожна DLL-бібліотека буде включати весь код створення та ініціалізації програми. А код цей дуже великий і компілюється десь у 300 Кбайт. Таким чином, мінімальний розмір однієї DLL – 300 Кбайт. ЯкщоЯкщо ви використовуєте пакети, весь код ініціалізації вже міститься в пакеті vcl70.bpl, і у ваші пакети він включатися не буде.
- Пакет для Delphi є "рідним" засобом для зберігання коду. Якщо DLL виникають проблеми під час передачі рядків, динамічних масивів, класів, то пакетах таких проблем немає.
Процес створення пакета дуже простий. Спочатку закриваєте відкритий проект командою File-> Close All. Потім виберіть пункт меню File -> New -> Other та на вкладці New двічі клацаєте на іконці Package. В результаті відкриється вікно Package – Package1.dpk. Збережіть проект - тим самим ви дасте новому пакету осмислене ім'я. Отже, у вікні Package є два поля: Contains і Requires. У полі Contains слід додати всі модулі, які потрібно включити в пакет. У полі Requires слід вказати, на які пакети ваш пакет посилатиметься під час компіляції. Зазвичай це поле заповнюється автоматично, проте, якщо цього не сталося, вам доведеться додати необхідні пакети вручну. Якщо ви цього не зробите, весь код модулів, що використовується, буде включений у ваш пакет. Мало того, що пакет значно додасть у вазі, але, можливо, ви не зможете надалі відкомпілювати програму з пакетами. Щоб уникнути неприємностей, звертайте увагу на повідомлення компілятора при компіляції пакетів. Наступне повідомлення досить істотне: Unit 'Unit1' implicitly imported into package 'Package1'
Це означає, що функції модуля Unit1, що використовуються, будуть включені в пакет Package1.
Загалом це не страшно, якщо ви більше ніде крім модулів пакета не посилаєтеся на модуль Unit1, інакше Delphi не зможе виконати компіляцію.
Крім того, у вікні Package є кнопка Options, при натисканні на яку ви можетевстановити параметри для свого пакета. На вкладці Description у полі Usage options потрібно вибрати пункт "Designtime and runtime". Для компіляції проекту слід натиснути кнопку Compile. У результаті в папці DelphiN\Projects\Bpl з'являться два нових файли - один з них матиме розширення *.bpl (сам пакет), а другий - *.dcp (файл, що містить необхідну інформацію для компіляції з пакетами).
Отже, всі необхідні пакети скомпільовані. Тепер залишилося на основі пакетів створити програму. Для того, щоб вказати Delphi, що потрібно використовувати пакети, потрібно вибрати пункт меню Project -> Options і поставити галочку у полі "Build with runtime packages". Якщо в цьому полі немає ваших пакетів, то обов'язково додайте їх, інакше використовуваний код цих пакетів просто буде скомпільований у ваш exe-шник.
Якщо пакет завантажується статично, ніяких особливих маніпуляцій для використання пакета не потрібно. Просто підключаєте у своєму додатку в секції uses наявні в пакеті модулі - все як завжди.
Якщо ж пакет вантажиться динамічно, його потрібно підвантажувати за допомогою функції LoadPackage. Пакет завантажується за допомогою функції UnLoadPackage. В іншому - все як у DLL.