Сущность технологии COM



Классы и IDL


Как уже отмечалось в начале этой главы, СОМ рассматривает интерфейсы и классы как отдельные сущности. В свете этого классы СОМ (а равно и интерфейсы СОМ) должны быть определены в IDL с целью обеспечить независимое от языка описание конкретных типов данных, которые может экспортировать сервер. IDL-определение класса СОМ содержит список интерфейсов, которые экспортируются элементами класса, исключая катастрофический сбой:

[uuid(753A8A7D-A7FF-11d0-8C30-0080C73925BA)] coclass Gorilla { interface IApe; interface IWarrior; }

IDL-определения коклассов (coclass) всегда появляются в контексте определения библиотеки (library definition). В IDL определения библиотек используются для группирования набора типов данных (например, интерфейсы, коклассы, определения типов) в логический блок или пространство имен. Все типы данных, появляющиеся в контексте определения библиотеки IDL, будут отмечены в результирующей библиотеке типов. Библиотеки типов используются вместо IDL-файлов такими средами, как Visual Basic и Java.

Как правило, IDL-файл может содержать один библиотечный оператор, и все типы данных, определенные или использованные внутри определения библиотек, появятся в генерируемой библиотеке типа:

// apes.idl // bring in IDL definitions of ape interfaces // введем IDL-определения интерфейсов обезьян import "apeitfs.idl"; [ uuid(753A8A80-A7FF-11d0-8C30-0080C73925BA), // LIBID - идентификатор библиотеки version(1.0), // version number of library - номер версии библиотеки lcid(9), // locale ID of library (english) // код локализации библиотеки (english) helpstring("Library of the Apes") // title of library - заголовок библиотеки ] library ApeLib { importlib("stdole32.tlb");

// bring in std defs. - вносим стандартные опредепения

[uuid(753A8A7D-A7FF-11d0-8C30-0080C73925BA)] coclass Gorilla { [default] interface IApe; interface IWarrior; }

[uuid(753A8A7E-A7FF-11d0-8C30-0080C73925BA)] coclass Chimpanzee { [default] interface IApe; interface IEgghead; }




Содержание  Назад  Вперед