Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Объявление интерфейсов

Идентификатор GUID

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

Если бы интерфейсы различались только по именам, то при случайном совпадении имен (а это происходило бы довольно часто, поскольку имя обычно несет в себе смысловую нагрузку) двух интерфейсов, реализованных в разных модулях, вместо одного модуля загружался бы другой. Поэтому для идентификации интерфейса используется структура типа GUID (Globally Unique Identifier — глобально уникальный идентификатор), которая имеет размер 16 байт (128 бит). Единственный тип данных, который предопределен для интерфейса, — это GUID. Каждый СОМ-интерфейс содержит собственный идентификатор GUID. Если разработчик реализует новый интерфейс, то этот интерфейс обязательно должен иметь GUID, причем уникальность должна соблюдаться не только в рамках данного компьютера разработчика, но и для всего мира. Эта глобальная уникальность достигается путем генерации GUID как псевдослучайного числа по алгоритму, определенному консорциумом Open Group и использующему некоторые специфические характеристики данного компьютера (такие, как МАС-адрес сетевого адаптера). Алгоритм гарантирует, что все сгенерированные новые значения GUID будут отличаться от полученных ранее, даже если они генерируются на разных компьютерах.

Описанная выше структура интерфейса естественно решает первую проблему экспорта объектов между модулями — каждый интерфейс однозначно определяется своим идентификатором GUID, имеет вполне определенный список методов с вполне определенными параметрами и условиями вызова. Таким образом, имеется однозначный протокол вызова методов, и это гарантирует корректность передаваемых данных и сохранность стека.

Для поддержки интерфейсов Delphi расширяет синтаксис языка Pascal дополнительными ключевыми словами. Объявление интерфейса в Delphi реализуется с помощью ключевого слова interface:

type IMyInterface = interface

[‘{412AFF00-5C21-11D4-84DD-C8393F763A13}’]

procedure DoSomething(var I: Integer): stdcall;

function DoSomethingAnother(S: String): Boolean;

end;

IMyInterface2 = interface(IMyInterface)

[‘{412AFF01-5C21-11D4-84DD-C8393F763A13}']

procedure DoAdditional(var I: Integer); stdcall;

end;

Для генерации нового значения GUID в среде разработки Delphi используется сочетание клавиш Ctrl+Shift+G.

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


Дата добавления: 2014-01-05; Просмотров: 333; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.