- •Динамически загружаемые библиотеки
- •5.1. Динамически загружаемые библиотеки
- •5.2. Разработка библиотеки
- •5.2.1. Структура библиотеки
- •5.2.2. Экспорт подпрограмм
- •5.2.3. Соглашения о вызове подпрограмм
- •5.3. Использование библиотеки в программе
- •5.3.1. Статический импорт
- •5.3.2. Модуль импорта
- •5.3.3. Динамический импорт
- •5.3.4. Глобальные переменные и константы
- •5.3.5. Инициализация и завершение работы библиотеки
- •5.3.6. Исключительные ситуации и ошибки выполнения подпрограмм
- •5.3.7. Общий менеджер памяти
- •5.3.8. Стандартные системные переменные
- •Программирование на языке Delphi
- •6.1. Понятие интерфейса
- •6.2. Описание интерфейса
- •6.3. Расширение интерфейса
- •6.4. Глобально-уникальный идентификатор интерфейса
- •6.5. Реализация интерфейса
- •6.6. Использование интерфейса
- •6.7. Реализация нескольких интерфейсов
- •6.8. Реализация интерфейса несколькими классами
- •6.9. Связывание методов интерфейса с методами класса
- •6.10. Реализация интерфейса вложенным объектом
- •6.11. Совместимость интерфейсов
- •6.12. Совместимость класса и интерфейса
- •6.13. Получение интерфейса через другой интерфейс
- •6.14. Механизм подсчета ссылок
- •6.15. Представление интерфейса в памяти
- •6.16. Применение интерфейса для доступа к объекту dll-библиотеки
- •6.17. Итоги
- •7.1. Проект
- •7.1.1. Понятие проекта
- •7.1.2. Файлы описания форм
- •7.1.3. Файлы программных модулей
- •7.1.4. Главный файл проекта
- •7.1.5. Другие файлы проекта
- •7.2. Управление проектом
- •7.2.1. Создание, сохранение и открытие проекта
- •7.2.2. Окно управления проектом
- •7.2.3. Группы проектов
- •7.2.4. Настройка параметров проекта
- •7.2.5. Компиляция и сборка проекта
- •7.2.6. Запуск готового приложения
- •7.3. Форма
- •7.3.1. Понятие формы
- •7.3.2. Имя и заголовок формы
- •7.3.3. Стиль формы
- •7.3.4. Размеры и местоположение формы на экране
- •7.3.5. Цвет рабочей области формы
- •7.3.6. Рамка формы
- •7.3.7. Значок формы
- •7.3.8. Невидимая форма
- •7.3.9. Прозрачная форма
- •7.3.10. Полупрозрачная форма
- •7.3.11. Недоступная форма
- •7.3.12. События формы
- •7.4. Несколько форм в приложении
- •7.4.1. Добавление новой формы в проект
- •7.4.2. Добавление новой формы из Хранилища Объектов
- •7.4.3. Переключение между формами во время проектирования
- •7.4.4. Выбор главной формы приложения
- •7.4.5. Вызов формы из программы
- •7.5. Компоненты
- •7.5.1. Понятие компонента
- •7.5.2. Визуальные и невизуальные компоненты
- •7.5.3. «Оконные» и «графические» компоненты
- •7.5.4. Общие свойства визуальных компонентов
- •7.5.5. Общие события визуальных компонентов
- •7.6. Управление компонентами при проектировании
- •7.6.1. Помещение компонентов на форму и их удаление
- •7.6.2. Выделение компонентов на форме
- •7.6.3. Перемещение и изменение размеров компонента
- •7.6.4. Выравнивание компонентов на форме
- •7.6.5. Использование Буфера обмена
- •7.7. Закулисные объекты приложения
- •7.7.1. Application — главный объект, управляющий приложением
- •7.7.2. Screen — объект, управляющий экраном
- •7.7.3. Mouse — объект, представляющий мышь
- •7.7.4. Printer — объект, управляющий принтером
- •7.7.5. Clipboard — объект, управляющий Буфером обмена
- •7.8. Итоги
6.16. Применение интерфейса для доступа к объекту dll-библиотеки
Если вы поместите свой класс в DLL-библиотеку, то при необходимости использовать его в главной программе столкнетесь с проблемой. Подключение модуля с классом к главной программе приведет к включению в нее кода всех методов класса, т.е. задача выделения класса в DLL-библиотеку не будет решена. Если же не подключить модуль с описанием класса, главная программа вообще не будет знать о существовании класса, и воспользоваться классом будет невозможно. Эта проблема решается с помощью интерфейсов. Покажем это на примере модуля ReadersUnit.
Сначала вынесем описание интерфейса ITextReader в отдельный модуль (например, ReaderIntf), чтобы этот модуль в дальнейшем можно было подключить к главной программе:
|
unit ReadersIntf;
interface type ITextReader = interface(IInterface) ... end;
implementation
end. |
Затем удалим описание интерфейса из модуля ReadersUnit, а вместо него подключим модуль ReaderIntf:
|
unit ReadersUnit;
interface
uses ReaderIntf; ... |
Наконец включим скорректированный модуль ReadersUnit в DLL-библиотеку, которую назовем ReadersLib:
|
library ReadersLib;
uses SysUtils, Classes, ReadersUnit;
{$R *.res}
begin end. |
Вроде бы все готово, и теперь в главной программе достаточно подключить модуль ReaderIntf и работать с объектами через интерфейс ITextReader (рисунок 6.6).
Рисунок
6.6. Схема получения программы и
DLL-библиотеки
Но постойте! А как в программе создавать объекты классов, находящихся в DLL-библиотеке? Ведь в интерфейсе нет методов для создания объектов! Для этого определим в DLL-библиотеке специальную функцию и экспортируем ее:
|
library ReadersLib; ...
function GetDelimitedReader(const FileName: string; const Delimiter: Char = ';'): ITextReader; begin Result := TDelimitedReader.Create(FileName, Delimiter); end;
exports GetDelimitedReader;
begin end. |
В главной программе импортируйте функцию GetDelimitedReader, чтобы с ее помощью создавать объекты класса TDelimitedReader:
|
program Example;
uses ReadersIntf;
function GetDelimitedReader(const FileName: string; const Delimiter: Char = ';'): ITextReader; external 'ReadersLib.dll' name 'GetDelimitedReader';
var Intf: ITextReader; begin Intf := GetDelimitedReader; ... end. |
Теперь вы знаете, как разместить объекты в DLL-библиотеке. Смело пользуйтесь динамически загружаемыми библиотеками, не теряя преимуществ ООП.
6.17. Итоги
Вы прочитали и усвоили весь материал всех предыдущих глав? Тогда спешим вас поздравить! Можете смело утверждать, что знаете язык программирования Delphi. Что же дальше? Вас ждет новая высота — среда программирования Delphi. Сейчас вы имеете лишь поверхностное представление о ее возможностях. Настало время подготовить себя к профессиональной работе в среде Delphi.
Программирование на языке Delphi
Глава 7. Проект приложения
Авторы: А.Н. Вальвачев К.А. Сурков Д.А. Сурков Ю.М. Четырько
Опубликовано: 18.12.2005 Версия текста: 1.0
7.1. Проект
7.1.1. Понятие проекта 7.1.2. Файлы описания форм 7.1.3. Файлы программных модулей 7.1.4. Главный файл проекта 7.1.5. Другие файлы проекта
7.2. Управление проектом
7.2.1. Создание, сохранение и открытие проекта 7.2.2. Окно управления проектом 7.2.3. Группы проектов 7.2.4. Настройка параметров проекта 7.2.5. Компиляция и сборка проекта 7.2.6. Запуск готового приложения
7.3. Форма
7.3.1. Понятие формы 7.3.2. Имя и заголовок формы 7.3.3. Стиль формы 7.3.4. Размеры и местоположение формы на экране 7.3.5. Цвет рабочей области формы 7.3.6. Рамка формы 7.3.7. Значок формы 7.3.8. Невидимая форма 7.3.9. Прозрачная форма 7.3.10. Полупрозрачная форма 7.3.11. Недоступная форма 7.3.12. События формы
7.4. Несколько форм в приложении
7.4.1. Добавление новой формы в проект 7.4.2. Добавление новой формы из Хранилища Объектов 7.4.3. Переключение между формами во время проектирования 7.4.4. Выбор главной формы приложения 7.4.5. Вызов формы из программы
7.5. Компоненты
7.5.1. Понятие компонента 7.5.2. Визуальные и невизуальные компоненты 7.5.3. «Оконные» и «графические» компоненты 7.5.4. Общие свойства визуальных компонентов 7.5.5. Общие события визуальных компонентов
7.6. Управление компонентами при проектировании
7.6.1. Помещение компонентов на форму и их удаление 7.6.2. Выделение компонентов на форме 7.6.3. Перемещение и изменение размеров компонента 7.6.4. Выравнивание компонентов на форме 7.6.5. Использование Буфера обмена
7.7. Закулисные объекты приложения
7.7.1. Application — главный объект, управляющий приложением 7.7.2. Screen — объект, управляющий экраном 7.7.3. Mouse — объект, представляющий мышь 7.7.4. Printer — объект, управляющий принтером 7.7.5. Clipboard — объект, управляющий Буфером обмена
7.8. Итоги
Решаемая
на компьютере задача реализуется в виде
прикладной программы, которую для
краткости называют приложением. В основе
разработки приложения в среде Delphi лежит
проект. Центральной частью проекта
является форма, на которую помещаются
необходимые для решения конкретной
задачи компоненты. В такой последовательности
— проект - формы - компоненты — мы и
рассмотрим процесс создания приложения
в среде Delphi. По ходу изложения материала
мы будем часто обращаться к примеру с
вычислением идеального веса, который
был рассмотрен в первой главе. Если вы
его забыли, перечитайте первую главу
еще раз.
