Читайте также:
|
|
Если вы поместите свой класс в 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Представление интерфейса в памяти | | | Понятие компонента |