Основы COM. Рудалев В.Г - 5 стр.

UptoLike

5
3. Удаленный сервер (Remote Server). Работает на другом компьютере сети .
Как видим, основной задачей COM является создание многократно используе-
мого кода, доступного в сетевой среде из программ, написанных на различных
языках программирования. При этом очень важно обеспечить уникальность в
именовании компонентных классов , интерфейсов и других объектов COM. Для
этой цели они снабжаются 128-разрядным глобальным уникальным идентифи-
катором (GUID), алгоритм формирования которого гарантирует крайне низкую
вероятность повторения значений. GUID можно получить с помощью функции
API CoCreateGuid() или в среде Delphi, нажав комбинацию клавиш
Ctrl+Shift+G. Идентификатор GUID для классов называется CLSID, для ин-
терфейсов - IID.
1.2. Интерфейсы
В основе COM лежит понятие интерфейса . Интерфейс - это совокупность ме-
тодов класса , задающая соглашение между разработчиком и пользователем
класса о формальных правилах их использования.
Свойства интерфейса :
1. В интерфейс входят только объявления методов и их параметров . Поля в
интерфейсе не описываются, также как и реализация методов .
2. Порядок методов в интерфейсе существенен, а их названия нет.
3. Интерфейс никогда не меняется разработчиком. При необходимости моди-
фикации создается новый интерфейс.
4. У каждого объекта COM может быть множество интерфейсов .
5. Интерфейсы снабжаются уникальным идентификатором IID, аналогичным
GUID.
6. Интерфейсы могут наследоваться и образовывать иерархию.
7. Все интерфейсы имеют общего предка интерфейс IUnknown. Описание
его, приведенное в модуле system.pas, имеет вид
type
IUnknown = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj):
HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
Здесь в квадратных скобках записывается строковое представление идентифи-
катора IID. В целом описание интерфейса аналогично описанию класса , только
используется другое служебное слово interface. Если интерфейс наследу-
ет методы предка , то имя интерфейса - предка указывается в круглых скобках
после слова interface.
Рассмотрим назначение методов IUnknown. Последние два метода предназна-
чены для реализации механизма автоматического подсчета ссылок.
                                           5
3. У д аленны й сервер(Remote Server). Работаетна д ругом компью тересети .
К акв и д и м, основ ной з ад ачей COM яв ляется соз д ани е многократно и спольз уе-
мого код а, д оступного в сетев ой сред е и з программ, напи санны х на раз ли чны х
яз ы ках программи ров ани я. При этом очень в аж но обеспечи ть уни кальность в
и менов ани и компонентны х классов , и нтерфей сов и д руги х объектов COM. Д ля
этой цели они снабж аю тся 128-раз ряд ны м глобальны м уни кальны м и д енти фи -
катором (GUID), алгори тм форми ров ани я которого гаранти руеткрай нени з кую
в ероятность пов торени я з начени й . GUID мож но получи ть спомощ ью функци и
API CoCreateGuid() и ли в сред е Delphi, наж ав комби наци ю клав и ш
Ctrl+Shift+G. И д енти фи каторGUID д ляклассов наз ы в аетсяCLSID, д ляи н-
терфей сов - IID.


1.2. И нт е рф е йсы
В основ е COM леж и т поняти е и нтерфей са. И нтерфей с - это сов окупность ме-
тод ов класса, з ад аю щ ая соглаш ени е меж д у раз работчи ком и польз ов ателем
класса о формальны х прав и лах и х и спольз ов ани я.
Св ой ств а и нтерфей са:
1. В и нтерфей с в ход ят только объяв лени я метод ов и и х параметров . Поля в
    и нтерфей сенеопи сы в аю тся, такж екаки реали з аци яметод ов .
2. Поряд окметод ов в и нтерфей сесущ еств енен, а и х наз в ани я–нет.
3. И нтерфей с ни когд а не меняется раз работчи ком. При необход и мости мод и -
    фи каци и соз д аетсянов ы й и нтерфей с.
4. У каж д ого объекта COM мож етбы ть множ еств о и нтерфей сов .
5. И нтерфей сы снабж аю тся уни кальны м и д енти фи катором IID, аналоги чны м
    GUID.
6. И нтерфей сы могутнаслед ов атьсяи образ ов ы в ать и ерархи ю .
7. В сеи нтерфей сы и мею тобщ его пред ка –и нтерфей сIUnknown. О пи сани е
    его, при в ед енноев мод улеsystem.pas, и меетв и д
type
   IUnknown = interface
      ['{00000000-0000-0000-C000-000000000046}']
      function QueryInterface(const IID: TGUID; out Obj):
                                                         HResult; stdcall;
      function _AddRef: Integer; stdcall;
      function _Release: Integer; stdcall;
   end;
Зд есь в кв ад ратны х скобках з апи сы в ается строков ое пред став лени е и д енти фи -
катора IID. В целом опи сани еи нтерфей са аналоги чно опи сани ю класса, только
и спольз уется д ругое служ ебное слов о – interface. Е сли и нтерфей снаслед у-
ет метод ы пред ка, то и мя и нтерфей са-пред ка указ ы в ается в круглы х скобках
послеслов а interface.
Рассмотри м наз начени е метод ов IUnknown. Послед ни е д в а метод а пред наз на-
чены д ляреали з аци и механи з ма ав томати ческого под счета ссы лок.