Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интересности по COM.doc
Скачиваний:
34
Добавлен:
28.06.2014
Размер:
7.48 Mб
Скачать

Тема 3. Пакование и информация типов

План:

1. Что такое пакование

2. Информация типов

1. Что такое пакование На что действительно указывает указатель интерфейса

• На что указывает указатель интерфейса клиента зависит от того, какой тип сервера, на котором объект выполнен

• Для объекта на внутренне процессном сервере, указатель клиента указывает прямо на интерфейс объекта

• Для объекта на локальном сервере, указатель клиента указывает на объект proxy

• Proxy пакует параметры метода для пересылки

• Stub на локальном сервере распаковывает параметры и вызывает метод в объекте

• Объект на удаленном сервере также полагается на proxy и stub, но использует вызов удаленной процедуры (RPC) для коммуникации

• пакование (Marshaling) и распакование (Unmarshaling)

• Параметры, посылаемые между процессами и машинами, должны быть запакованы для отправления и потом распакованы, когда они прибудут

• Эта пакование и распакование называется marshaling и unmarshaling

Рис. 3.1. Доступ к COM объекту во внутрипроцессном сервере

Рис. 3.2. Доступ к COM на локальном сервере

Рис. 3.3. Доступ к COM объекту на удаленной машине.

• Proxy и stub представляет marshaling и unmarshaling

- Создание Proxy и Stub

• Инструмент, называемый компилятор MIDL может быть использован, чтобы создавать proxy и stub для интерфейса определенного в IDL

-Заказное Marshaling

Разработчики программного обеспечения могут заменить COM стандарты marshaling своим собственным заказным marshaling

• Заказное marshaling может привести к ускорению работы кода

- Связывание Marshalers динамично: Замедление связывания

• Proxy и Stub иногда являются не самым лучшим способом делать marshaling

• Альтернатива, создающая код marshaling динамично, позволяет замедлить соединение

• Замедление соединения позволяет клиенту вызвать методы в интерфейсы, открытые во время выполнения

2. Информация типов

• IDL определяет точно документ интерфейсов объектов

• Proxy и stub для интерфейсов объекта могут быть произведены с определениями IDL

• Тип информации созданные из определений IDL могут быть использованы, чтобы сгенерировать код marshaling динамически

• Выполняемый клиент может иметь доступ к информации типа объекта, который описывает его интерфейс

• Объект может сохранить свой тип информации в библиотеке типов, сгенерированной компилятором MIDL

-Описание IDL

• Пример IDL содержит два определения интерфейса и информацию,

необходимую, чтобы произвести библиотеку типов

Рис. 3.4. Компилятор MIDL может генерировать библиотеки типов, также как и proxy и stub

Пример Marshaling и

типа информации:

[ object, uuid(E7CDODOO-1827-llCF-

9946-444553540000)]

interface ISpellChecker : lUnknown {

import "unknown.idl";

HRESULT LookUpWord([in] OLECHAR word[31],

[out] boolean *found);

HRESULT AddToDictionary([in] OLECHAR word[31]);

HRESULT RemoveFromDictaionary([in] OLECHAR word[31]);

}

[ object, uuid(5FBDD020-1863-11CF-

9946-444553540000) ]

interface IThesaurus : IUnknown {

HRESULT ReturnSynonym([in] OLECHAR word[31], [out] OLECHAR synonym[31]);

}

[uuid(B253E460-1826-HCF-9946-

444553540000), version(1.0)]

library TextToolsLib {

importlib ("stdole32.tib") ;

[uuid(B2ECFAAO-1827-llCF-9946-444553540000)

coclass CoTextTools {

interface ISpellChecker;

interface IThesaurus;

}

}

Рис. 3.5. Библиотека типа и ее клиент.

• Библиотека типа имеет GUID (глобальный уникальный идентификатор)

• Класс компонентного объекта, или сокласс, содержит список всех интерфейсов, которые объект поддерживает

• Библиотека типа содержит описание сокласса и каждый интерфейс

- Доступ к библиотеке типа

• Интерфейсы ITypeLib и ITypeInfo позволяют доступ к библиотеке типа и ее элементам

• Каждый объект в библиотеке типа описывает часть информации типа

• Доступ к библиотеке типа осуществляется через ItypeLib

• Используя методы в ITypeLib, клиент может получить указатель на интерфейсы ITypeInfo объектов библиотеки

• Используя методы в ITypeInfo, клиент может узнать о специфических элементах в библиотеке типа

- Использование информации типа

• В настоящее время библиотеки типа в основном используются с IDispatch

Новые понятия и термины:

  • RPC - вызов удаленной процедуры

  • Marshaling - пакование

  • Unmarshaling - распакование

  • IDL (interface definition language) – язык описания интерфейса

Контрольные вопросы:

1. Что такое marshaling?

2. Для чего используется marshaling?

3. Информация типов. Библиотека типов

Литература:

1.David Chappell “Understanding Active X and OLE”.Microsoft Press, 1996