Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Применение интерфейса для доступа к объекту динамически-подключаемой библиотеки

Понятие ссылки на метод объекта | Понятие события | Ошибки и исключительные ситуации | Классы исключительных ситуаций | В тот момент, когда управление передается на Except, в программе считается, что ошибка обработана. | Для возврата по try используется стек вызова процедур. | Приемы надежного программирования | Описание интерфейса | Механизм подсчета ссылок в интерфейсах | Reader._AddRef |


Читайте также:
  1. DSP эффекты, применение хоруса, реверберации и дилэя.
  2. III. Применение кванторов
  3. Rights of foreign citizens and persons without citizenship in the Russian Federation. [Электронный ресурс]. – Режим доступа: http://www. PetersburgCity.com/safety guide.
  4. АРХИТЕКТУРА СИСТЕМНОГО ИНТЕРФЕЙСА СОВРЕМЕННЫХ ПК. НАЗНАЧЕНИЕ КОМПОНЕНТОВ. РЕЖИМЫ ПЕРЕДАЧИ ИНФОРМАЦИИ ПО системными шинами.
  5. Атрибуты доступа к элементам объектов
  6. Библиотеки, IT и другие сервисы для студентов
  7. БОЕВОЕ ПРИМЕНЕНИЕ, СОСТАВ И НАЗНАЧЕНИЕ МАШИНЫ 1В19-1

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

Сначала вынесем описание интерфейса 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.

 

 

А как в программе создавать объекты классов, находящихся в DLL-библиотеке? Ведь в нтерфейсе нет методов для создания объектов! Для этого определим в DLL-библиотеке специальную функцию и экспортируем ее:

 

Library ReadersLib;

...

Function GetDelimitedReader(constFileName: string; constDelimiter: Char = ';'): ITextReader;

Begin

Result:= TDelimitedReader.Create(FileName, Delimiter);

End;

Exports

GetDelimitedReader;

Begin

End.

 

В главной программе импортируйте функцию GetDelimitedReader, чтобы с ее помощью создавать объекты класса TDelimitedReader:

Program Example;

Uses

ReadersIntf;

function GetDelimitedReader(constFileName: string; constDelimiter: Char = ';'): ITextReader;

external 'ReadersLib.dll' name 'GetDelimitedReader';

Var

Intf: ITextReader;

Begin

Intf:= GetDelimitedReader;

...

End.

 


Дата добавления: 2015-11-16; просмотров: 49 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Представление интерфейса в памяти| Понятие компонента

mybiblioteka.su - 2015-2024 год. (0.007 сек.)