- •Межобъектная Связь
- •Ташкент
- •Содержание
- •2. Com модель
- •3. Сложные документы
- •4. РаспределенныйCom
- •Тема 2. Модель компонентных объектов (com)
- •1. Описание сом объектов
- •2. Интерфейсы вCom
- •3. Создание com объектов
- •Тема 3. Пакование и информация типов
- •1. Что такое пакование На что действительно указывает указатель интерфейса
- •2. Информация типов
- •Тема 4. Автоматизация
- •1.Что понимается под автоматизацией
- •2. Дуальный интерфейс
- •Тема 5. Постоянство
- •1. Понимание постоянства
- •2. Структурная память для файлов
- •3. Контроль постоянства объекта
- •Тема 6. Моникеры
- •1. Что такое моникеры?
- •2. Асинхронный моникер
- •Тема 7.ActiveXуправление
- •1. Эволюция ActiveX управления
- •2. Три взгляда наActiveXуправление
- •3. Методы и события вActiveXуправление
- •Тема 8. Однородная передача данных и соединяемые объекты
- •1. Однородная передача данных
- •2. Соединение объектов
- •Тема 9. Распределенный сом
- •1. Создание удаленного объекта
- •2. Использование моникера в распределенномCom
- •3. Средства безопасного доступа для удаленных объектов
- •Тема 10. ActiveX, Internet, и World Wide Web
- •1.ActiveXдокументы
- •2.ActiveXдокументы иWeb
- •Тема 11. Введение в corba
- •1. Знакомство с набором спецификаций omg
- •2. Поддержка Анализа & Проектирования
- •3. Основы объектов
- •Что такое объект?
- •4. Corba Основы взаимодействия
- •5. Что такое orb
- •Список Литературы
- •Приложение а. Глоссарий
Тема 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