IDL-описаниеи библиотека типа
Помимо информации об интерфейсах, IDL-описание может содержать информацию о библиотеке типа.
Библиотека типа определяет важные для клиента характеристики СОМ-объекта: имя его класса, поддерживаемые интерфейсы, имена и адреса элементов интерфейса.
Рассмотрим пример приведенного ниже IDL-описания объекта для работы с файлами. Оно состоит из 3 частей. Первые две части описывают интерфейсы IРаботаСФайлами и IПреобразованиеФорматов, третья часть— библиотеку типа ФайлыБибл. По первым двум частям компилятор MIDL генерирует код посредников и заглушек, по третьей части — код библиотеки типа:
-----------1-я часть
[ object,
uuid(E7CDODOO-1827-11CF-9946-444553540000) ]
interface IРаботаСФайлами; IUnknown
{ import "unknown.idl"
HRESULT ОткрытьФайл ([in] OLECHAR имя[31]);
HRESULT ЗаписатьФайл ([in] OLECHAR имя[31]);
HRESULT ЗакрытьФайл ([in] OLECHAR имя[31]);
}
----------- 2-я часть
[ object.
uuid(5FBDD020-1863-11CF-9946-444553540000) ]
interface IПреобразованиеФорматов: IUnknown
{ HRESULT ПреобразоватьФормат ([in] OLECHAR имя[31],
[in] OLECHAR формат[31]);
}
------------ 3-я часть
[ uuid(B253E460-1826-11CF-9946-444553540000),
version (1.0)]
library ФайлыБибл
{ importlib ("stdole32.tlb");
[uuid(B2ECFAAO-1827-11CF-9946-444553540000) ]
coclass СоФайлы
{ interface IРаботаСФайлами;
interface IпреобразованиеФорматов;
}
}
Описание библиотеки типа начинается с ее уникального имени (записывается после служебного слова uuid), затем указывается номер версии библиотеки.
После служебного слова library записывается символьное имя библиотеки (ФайлыБибл).
Далее в операторе importlib указывается файл со стандартными определениями IDL - stdole32.tlb.
Тело описания библиотеки включает только один элемент — СОМ-класс (coclass), на основе которого создается СОМ-объект.
В начале описания СОМ-класса приводится его уникальное имя (это и есть идентификатор класса — CLSID), затем символьное имя — СоФайлы. В теле класса перечислены имена поддерживаемых интерфейсов — РаботаСФайлами и IПреобразованиеФорматов.
Как показано на рис. 13.24, доступ к библиотеке типа выполняется по стандартному интерфейсу ITypeLib, а доступ к отдельным элементам библиотеки — по интерфейсу ITypelnfo.
Рис. 13.24. Доступ к библиотеке типа
Дата добавления: 2016-06-18; просмотров: 2129;