1. Каким образом реализована поддержка COM/DCOM?
В языке Object Pascal появилось понятие интерфейса (interface). Описание интерфейса похоже на описание обычного класса, в нем не может быть указан спецификатор видимости. Список членов ограничен методами и свойствами, для чтения/записи которых используются методы. Поля в интерфейсе недопустимы. Типы параметров и возвращаемых значений ограничены типами, допустимыми в COM/DCOM, их полный перечень можно найти в on-line help.
Интерфейсы могут наследоваться, в соответствии с идеологией COM, допускается только одиночное наследование. Класс может реализовывать несколько интерфейсов, в этом случае он должен объявить методы, которые по типу параметров и возвращаемых значений совпадают с описанием методов соответствующего интерфейса.
Все интерфейсы имеют в качестве базового класса интерфейсный тип
IUnknown = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): Integer; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
Для поддержки OLE Automation также в модуле
IDispatch = interface(IUnknown)
['{00020400-0000-0000-C000-000000000046}']
function GetTypeInfoCount(out Count: Integer): Integer; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): Integer; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): Integer; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): Integer; stdcall;
end;
Для облегчения работы с COM имеется класс
2. В Delphi 3.0 допускается множественное наследование классов?
Нет, нет и еще 1024 раза нет. Язык Object Pascal в Delphi 3.0 не позволяет вам наследовать класс от более чем одного класса. Строго говоря, вы всегда наследуете ваш новый класс ровно от одного уже имеющегося. Если вы явно не указываете базовый класс, то им становится
Слухи о множественном наследовании идут из-за того, что в языке 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 (как и к любой другой версии этой СУБД) осуществляется следующим образом.