Интерфейсы могут наследоваться, в соответствии с идеологией COM, допускается только одиночное наследование. Класс может реализовывать несколько интерфейсов, в этом случае он должен объявить методы, которые по типу параметров и возвращаемых значений совпадают с описанием методов соответствующего интерфейса.
Все интерфейсы имеют в качестве базового класса интерфейсный тип IUnknown , объявленный в модуле System следующим образом:
IUnknown = interface
[ '{00000000-0000-0000-C000-000000000046}']
functionQueryInterface( constIID: TGUID; outObj): Integer; stdcall;
function_AddRef: Integer; stdcall;
function_Release: Integer; stdcall;
end;
Для поддержки OLE Automation также в модуле System имеется интерфейс IDispatch :
IDispatch = interface(IUnknown)
[ '{00020400-0000-0000-C000-000000000046}']
functionGetTypeInfoCount( outCount: Integer): Integer; stdcall;
functionGetTypeInfo(Index, LocaleID: Integer; outTypeInfo): Integer; stdcall;
functionGetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): Integer; stdcall;
functionInvoke(DispID: Integer; constIID: TGUID; LocaleID: Integer;
Flags: Word; varParams; VarResult, ExcepInfo, ArgErr: Pointer): Integer; stdcall;
end;
Для облегчения работы с COM имеется класс TInterfacedObject , который реализует методы, объявленные в интерфейсе IUnknown .
2. В Delphi 3.0 допускается множественное наследование классов?
Нет, нет и еще 1024 раза нет. Язык Object Pascal в Delphi 3.0 не позволяет вам наследовать класс от более чем одного класса. Строго говоря, вы всегда наследуете ваш новый класс ровно от одного уже имеющегося. Если вы явно не указываете базовый класс, то им становится TObject , стоящий таким образом в иерархии вообще всех классов.
Слухи о множественном наследовании идут из-за того, что в языке Object Pascal в Delphi 3.0 реализована поддержка интерфейсов для модели COM/DCOM. При этом новый класс может наследоваться от одного класса и реализовывать произвольное количество интефейсов. Соответствующее объявление нового типа:
TNewObject = class(TBaseObject, ISomeInterface, IAnotherInterface, IDummyInterface)
вызывает некоторую путаницу и может быть похожа на множественное наследование. Здесь можно провести анологию с языком Java. Интерфейсы в Delphi 3.0 похожи на интерфейсы в Java с отличием в том, что Java допускает множественное наследование интерфейсов, а Delphi — нет.
Фактически объявление интефейса представляет из себя кусочек таблицы виртуальных методов (VMT), который присоединяется к основной VMT класса.
Delphi, С++ Builder и базы данных: вопросы и ответы
Прошу вас рассказать, как подключать к Personal Oracle с помощью BDE. Для меня пока это остается загадкой.
Доступ к Personаl Oracle (как и к любой другой версии этой СУБД) осуществляется следующим образом.
Сначала нужно запустить сервер (в случае Personal Oracle для Windows 95 это отдельное приложение, в случае Oracle для Windows NT — набор сервисов, обслуживающих конкретную базу данных) и настроить клиентскую часть Oracle. Для этого следует запустить утилиту SQLNet Easy configuration (в случае Oracle 8 — Oracle Net8 Easy Config) и с ее помощью создать описание псевдонима базы данных Oracle (для него, как и в BDE, используется термин alias, но это не то же самое, что псевдоним BDE). При создании этого описания важны три параметра. Первый из них – сетевой протокол, с помощью которого осуществляется доступ к серверу Oracle (IPX/SPX, TCP/IP и др.). Второй параметр — местоположение сервера в сети. В случае Personal Oracle это обычно компьютер с IP-адресом 127.0.0.1 (это специальный адрес для доступа к локальному компьютеру, так называемый TCP loopback address). Третий параметр — имя базы данных. По умолчанию в случае Personal Oracle она называется ORCL. В общем случае имя может быть любым, но это должно быть имя уже существующей базы данных, с которой вы собираетесь работать. В принципе все описания псевдонимов Oracle хранятся в текстовом файле TNSNAMES.ORA, и можно редактировать его вручную.
Далее следует запустить утилиту SQL Plus и проверить соединение клиента с сервером. Обычно в качестве имени пользователя используется имя SYSTEM и пароль MANAGER (если вы сами администрируете сервер). Если же сервер был установлен раньше, есть смысл узнать у администратора базы данных, каким именем и паролем следует воспользоваться. Помимо имени пользователя и пароля, SQL Plus запросит так называемую строку связи, в которой должно содержаться имя сервиса, который был создан вами перед этим. При удачном соединении в SQL Plus появится соответствующее сообщение. Отметим, что утилита Oracle Net8 Easy Config позволяет протестировать соединение непосредственно в процессе создания описания сервиса. Если соединение с сервером было неудачным, стоит проверить, поддерживается ли указанный сетевой протокол и виден ли в сети компьютер, на котором установлен сервер, и, если нужно, внести изменения в описание сервиса.
Читать дальше