Интересности по COM (Интересности по COM)

Посмотреть архив целиком

Межобъектная связь


Межобъектная

Связь


Ф. Фогт

М. Ким


Ташкент















Настоящий учебный курс посвящен теоретическим основам концепций, на которых базируется связь между компонентами, такими как интерфейс, метод, объект и вызов удаленной процедуры, и дает практические примеры программирования, использующие эти концепции, чтобы строить приложения, которые работают и в ActiveX и CORBA средах.

Предназначен для студентов магистерского курса, обучающихся по направлению «Телематика».

Материалы данного учебного курса были подготовлены в рамках выполнения Совместного европейского проекта T-JEP-10497-98 с участием консультанта Гамбург-Харбургского Технического Университета, заведующего кафедрой «Technical Informatics 5» профессора, доктора Фридриха Фогта.

Мы признательны координаторам проекта профессору, доктору Рустаму Хамдамову, профессору, доктору Ханно Шаумбургу за организацию поддержки на всех стадиях проекта, которые сделали возможным создание данного курса.


























СОДЕРЖАНИЕ



Тема 1. Введение в ActiveX и OLE 5

1.Технология ActiveX 5

2. COM модель 6

3. Сложные документы 11

4. Распределенный COM 12

Тема 2. Модель компонентных объектов (COM) 13

1. Описание СОМ объектов 13

2. Интерфейсы в COM 14

3. Создание COM объектов 16

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

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

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

Тема 4. Автоматизация 26

1.Что понимается под автоматизацией 26

2. Дуальный интерфейс 29

Тема 5. Постоянство 32

1. Понимание постоянства 32

2. Структурная память для файлов 32

3. Контроль постоянства объекта 34

Тема 6. Моникеры 37

1. Что такое моникеры? 37

2. Асинхронный моникер 41

Тема 7. ActiveX управление 44

1. Эволюция ActiveX управления 44

2. Три взгляда на ActiveX управление 44

3. Методы и события в ActiveX управление 46

Тема 8. Однородная передача данных и соединяемые объекты 52

1. Однородная передача данных 52

2. Соединение объектов 53

Тема 9. Распределенный СОМ 56

1. Создание удаленного объекта 56

2. Использование моникера в распределенном COM 57

3. Средства безопасного доступа для удаленных объектов 58

Тема 10. ActiveX, Internet, и World Wide Web 63

1. ActiveX документы 63

2. ActiveX документы и Web 64

Тема 11. Введение в CORBA 76

1. Знакомство с набором спецификаций OMG 76

2. Поддержка Анализа & Проектирования 78

3. Основы объектов 82

4. CORBA Основы взаимодействия 83

5. Что такое ORB 85

Список Литературы 91

Приложение А. Глоссарий 92


Тема 1. Введение в ActiveX и OLE


План:

1.Технология ActiveX

2. COM модель

3. Сложные документы

4. Распределенный COM


1.Технология ActiveX


Написание хорошего программного обеспечения это действительно сложно


ActiveX и OLE - ближе к написанию лучшего программного обеспечения

От OLE к ActiveX


OLE 1 обеспечивает способ создания сложных документов

OLE 2 знакомит с Component Object Model (Моделью компонентных объектов)

•СОМ является основой для взаимодействия между различным программным обеспечением

Название Связь и Внедрение объектов (Object Linking and Embedding) стала просто OLE


OLE применялось к любой технологии, которая использует COM


Сегодня большинство технологий, основанных на COM закреплены за ActiveX

Понимание СОМ

Традиционно, различные типы программного обеспечения предоставляют сервисы различными способами











Рис. 1.1. Сложный документ с точки зрения пользователя




Доступ к сервисам различными способами является неоправданно сложным

СОМ определяет общий способ, чтобы обратиться к программным сервисам




















Рис. 1.2. Без СОМ, используются различные механизмы, чтобы осуществить доступ к сервисам, предоставляемые библиотеками, локальными процессами, операционной системой и удаленными процессами.


2. COM модель


  • Как СОМ работает

COM объект обеспечивает сервисы через методы, которые сгруппированы в интерфейсы

Методы в каждом интерфейсе обычно направлены на обеспечение специфического сервиса

COM объект выполнен внутри сервера и обычно поддерживает множественный интерфейс


Клиент использует указатель интерфейса, чтобы вызвать методы интерфейса

Каждый COM объект является примером класса

  • СОМ и объектная ориентированность

Объект является объединением данных и методов

В отличии от COM, наиболее популярные объектные технологии позволяют только единственный интерфейс на объект

В COM, класс идентифицирует специфическое выполнение набора интерфейсов

COM объекты поддерживают инкапсуляцию

Полиморфизм позволяет клиенту обращаться к различным объектам, как если бы они были одинаковыми

















Рис. 1.3. Сервисы COM объекта могут быть доступными через этот интерфейс





















Рис. 1.4. Каждый интерфейс обеспечивает один или более методов


























Рис. 1.5. Клиент с указателями на два интерфейса COM объекта




















Рис. 1.6. С COM, приложение осуществляет доступ к сервисам объекта (независимо, где находится объект) путем вызова метода в интерфейсе.
























Рис. 1.7. Объект имеет и методы и данные


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

COM объекты обеспечивают полиморфизм

Наследование выполнения и наследование интерфейса различны

Наследование интерфейса вновь использует спецификации, чем реальный код

Объекты COM поддерживают только наследование интерфейса

Объекты COM могут вновь использовать код через внедрение и агрегацию

COM объектно-ориентированная, но она отличается от других популярных объектно-ориентированных технологий

  • СОМ и программное обеспечение компонент


Аппаратное обеспечение развивается быстрее, чем программное обеспечение

Проектирование аппаратного программного обеспечения сопровождается повторным использованием существующих компонент

Программное обеспечение компоненты применяет эту идею к созданию нового программного обеспечения

Существующие подходы к повторному использованию программного обеспечения не были достаточными

Повторное использование через библиотеки может помочь

Повторное использование программного обеспечения с объектами может также помочь

Однако, на сегодня не существует большого рынка в повторно используемых объектах

Традиционные объектные технологии представляют три препятствия в создании рынка компонентного программного обеспечения

Проблема 1: Распределение объектов с их кодом-источником

Проблема 2: Повторное использование объектов сквозь различные языки

Проблема 3: Повторное соединение или перекомпилирование полного приложения, где один объект изменен

COM решает все три проблемы

COM нацелено на создание большого рынка в повторном использовании компонент

  • Выгоды от COM


СОМ предлагает выгоды от объектной ориентации

СОМ обеспечивает целостность


СОМ независима от языка


Подход COM с точки зрения новых версий является простым и эффективным

COM широко используется во всех продуктах Microsoft


- Пригодность COM

COM может использоваться во многих операционных системах


- Определение стандартных интерфейсов с COM


Разработчики приложений могут определять интерфейсы, подходящие по их мнению

Программа индустриальных решений OLE спроектировано, чтобы создать индустриальные стандарты интерфейсов

Microsoft сам определяет стандарты интерфейсов во многих случаях

Каждая технология ActiveX и OLE определяет набор интерфейсов, использующих COM

Описание ActiveX и OLE технологий



Автоматизация обеспечивает программируемость

•Автоматизированные клиенты обычно осуществляют доступ к методам объекта через диспетчерский интерфейс

Excel позволяет доступ к его сервисам через свой диспетчерский интерфейс

Многие другие приложения также поддерживают автоматизацию

  • Постоянство

Разделение на COM объекты делает данные постоянными

Структурная память позволяет COM объектам совместное использование один дисковый файл

Структурная память организовывает файл в память и потоки

  • Monikers

Клиент может создать и инициализировать COM объект

Moniker знает как создать и инициализировать другой объект


-Единая форма передачи данных и соединимые объекты

Единая форма передачи позволяет всем видам программного обеспечения обмениваться данными обычным способом


3. Сложные документы



  • Сложные документы



OLE технология позволяет создание сложных документов

Приложения действуют как контейнеры и серверы





















Рис. 1.8. Со структурной памятью, единственный файл содержит несколько памятей и потоков

















Рис. 1.9. Документ может содержать элементы, управляемые различными приложениями



- AcitveX Controls

ActiveX Controls определяет стандартный интерфейс для повторного использования компонент

ActiveX controls первоначально назывался OLE controls


ActiveX controls основывается на многие другие технологии, основанные на COM


4. Распределенный COM



  • Распределенный COM

Распределенный COM позволяет клиентам осуществить доступ к объектам COM на других машинах


DCOM использует RPC и обеспечивает сервисы безопасности

Интерфейс, основанный на COM-сервисах


DBMS сервисы могут быть доступны с использование COM объектов

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

Транзакционные операции или все успешны или все неуспешны

Модели транзакционных технологий, основанных на СОМ как объекты COM


Сервис директорий отображает имя на информацию о названном объекте


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


Component Object Model - Модель компонентных объектов

Object Linking and Embedding (OLE) - Связь и Внедрение объектов




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


1. Технология ActiveX и OLE

2. Что такое COM и как он работает

3. Как работает распределенный COM. Схема распределенного COM

4. Сложные документы OLE





Литература:

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

Тема 2. Модель компонентных объектов (COM)


План :

1. Описание СОМ объектов

2. Интерфейсы в COM

3. Создание COM объектов


1. Описание СОМ объектов


Понимание ActiveX и OLE требует понимания COM

Описание COM объектов

Сервисы COMобъекта доступны через методы, входящие в его интерфейсы

  • Интерфейсы

Интерфейс является контрактом между объектом и его клиентами

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

Читаемый для людей интерфейс начинается с буквы I

Имя интерфейса не гарантирует, что оно уникально

Имена интерфейсов, используемых программным обеспечением являются глобально-уникальными

Каждый GUID (Globally Unique Identifier) является уникальным во времени и пространстве


IID (interface identifier) является GUID

COM не передает мандат определенному языку нотацию для описания интерфейса

Язык описания интерфейса COM часто используется для определения интерфейса














Рис. 2.1. A COM объект, его интерфейс и его клиент



[ object, uuid(E7CDODOO-1827-llCF-9946-444553540000)]

interface ISpellChecker :IUnknown {

import "unknown.idl" ;

HRESULT LookUpWord([in] OLECHAR word[31], [out] boolean *found);

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

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

}


2. Интерфейсы в COM



Определение интерфейса включает его IID


Каждый интерфейс наследует из IUnknown интерфейса


Определение метода специфицирует имя метода, возвращаемое значение и (необязательно) список параметров

Интерфейсы неизменны – однажды объявленные public (общие), они не могут быть изменены

Добавление новой функциональности требует определение нового интерфейса

COM определяет стандартный бинарный интерфейс для каждого своего метода

vtable интерфейса содержит указатель на каждый из его методов

Все vtables начинаются с указателя на методы IUknown


• Объект должен принадлежать этому бинарному формату для каждого интерфейса



Формат бинарного интерфейса COM похож на то, что компилятор C++ производит для класса C+

Программисту, пишущему клиентские части может понадобиться знать этот бинарный формат


Инструменты, такие как Visual Basic могут скрыть детали от программиста, пишущего клиентскую часть - IUnknown, Фундаментальный интерфейс

Каждый COM объект должен поддерживать IUnknown

Метод Querylnterface позволяет клиенту спросить указатель на другой интерфейс

Querylnterface помогает решить проблемы версий

Новые версии программного обеспечения с дополнительными характеристиками могут преподнести проблемы

Раскрытие новых характеристик требует добавление нового интерфейса

Querylnterface позволяет Вам начать использовать новые характеристики плавно

Изменение характеристик требует добавление нового интерфейса

Querylnterface может быть самым важным элементом в COM

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


















Рис. 2.2. На что похож интерфейс в объекте























Рис. 2.3. Использование IUnknown:: QueryInterface.




Подсчет Reference выполнен с помощью IUnknown методов AddRef и Release


Подсчет Reference контролирует время жизни объекта

- Классы

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

Класс определяет выполнение группы интерфейсов

- Сервисы для COM Объектов

COM объект выполнен на сервере (в процессе, локально или удаленно)

Клиенту необходимо знать какой тип сервера, на котором объект выполнен

- COM и Многопоточность

Многопоточный процесс содержит несколько видимых одновременных потоков выполнения

В начале COM поддерживал многопоточность, используя раздельную модель













Рис. 2.4 : Три типа серверов




Сейчас COM также поддерживает три потока

Свободные потоки требуют большего от программиста


3. Создание COM объектов


Создание COM Объектов

-Библиотека COM

Библиотека COM обеспечивает основные сервисы, которые необходимы объектам и клиентам

• Библиотека COM использует системную регистрацию, чтобы установить необходимый сервер для индивидуального класса

• Объект, созданный с использованием только COM библиотеки, является неинициализированным экземпляром класса

Если необходимо, клиент может явно инициализировать новый экземпляр объекта

-Создание Единственного объекта

Клиент может вызвать CoCreateInstance, чтобы создать новый экземпляр объекта

Клиент определяет CLSID, IID, и тип сервера, который он хочет, чтобы библиотека COM запустила





















Рис. 2.5. Создание объекта с CoCreateInstance



DCOM позволяет создание удаленных объектов

Механизм COM контролирует, какие клиенты могут начать какие сервисы

-Создание множественных объектов одного класса : Производящий класс

• Производящий класс может создать множественные объекты для одного класса

CoCreateInstance использует производящий класс, который скрыт от клиента

Каждый производящий класс поддерживает интерфейс IClassFactory

IClassFactory2 интерфейс добавляет методы, которые поддерживают лицензирование

Клиент вызывает CoGetClassObject, чтобы получить указатель на производящий класс

Клиент может использовать IClassPactory::CreateInstance чтобы создать новый экземпляр объекта

- Эмуляция

Эмуляция позволяет одному классу играть роль другого

Эмуляция также позволяет создание генетических компонент

  • Инициализация COM объектов


















Рис. 2.6. Создание объекта с помощью производства класса



Первый указатель интерфейса, который запрашивает клиент, это часто интерфейс, используемый, чтобы запросить инициализацию


Повторное использование объектов

Один COM объект не может использовать другой код через интерфейс

COM обеспечивает повторное использование или содержанием или объединением

В обоих механизмах «внешний» объект повторно использует «внутренний» объект

  • Содержание

С содержанием внешний объект, проще, клиент внутреннего объекта

Содержание – просто часто используемое

  • Объединение

Хотя это просто, содержание не всегда является наиболее эффективным решением

С объединением, внешний объект представляет интерфейсы внутреннего объекта как свои собственные

Так как объединение требует специальную поддержку от внутреннего объекта, не все объекты могут быть объединены




















Рис. 2.7. Повторное использование объектов через содержание


















Рис. 2.8. Повторное использование объекта путем объединения





Специальная поддержка необходима, чтобы гарантировать IUnknown методы работают так как ожидалось

Внешний объект передает внутреннему объекту указатель на интерфейс IUnknown


Важность COM

Пока COM сама по себе проста, она позволяет создание мощного, эффективного программного обеспечения


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

  • GUID (Globally Unique Identifier) глобальный уникальный идентификатор


  • IID (interface identifier) идентификатор интерфейса




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


1. Модель компонентных объектов

2.Интерфейсы в COM: vtable IUnknown интерфейс

3. Создание COM. Клиент/серверная модель COM





Литература:

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

Тема 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






Тема 4. Автоматизация


План:

1.Что понимается под автоматизацией

2. Дуальный интерфейс

1.Что понимается под автоматизацией


Создание программируемых приложения позволяет другому программному обеспечению, также как и людям, использовать его сервисы.

Макро язык приложения делает это, но только ограниченным способом

Что требуется - это стандартный способ сделать любое приложение программируемым

Обеспечение этой программируемости, использующей COM называется Автоматизацией


Точка зрения пользователя на Автоматизацию

Автоматизация широко поддерживается сегодня

С Автоматизацией, Вы можете записывать программы, которые автоматизируют повторные задачи

Автоматизация может также использоваться, чтобы обратиться к определенным функциям, обеспечиваемыми приложением


Программы, которые управляют другими приложения иногда называются скриптами


Обеспечение программируемости

Методы в vtable сложны, чтобы вызвать их из Visual Basic


















Рис. 4.1. Автоматизация создания ежемесячного сообщения.


IDispatch and Dispinterfaces

IDispatch был первоначально определен, чтобы позволить приложениям быть программируемым из Visual Basic

• Через одиночный метод IDispatch::Invoke, клиент может вызывать любое число методов

Dispinterface это группа методов которая может быть вызвана с использованием IDispatch: :Invoke

Используя IDispatch, программа Visual Basic может легко вызывать методы в Dispinterface

Программы на других языках типа C++ могут также вызывать методы, использующие IDispatch

• Большинство приложений сегодня программируемые, с

использованием IDispatch и одной или более dispinterfaces

- Клиенты и Серверы

ActiveX компоненты, действующие как серверы, были первоначально известны как серверы автоматизации














Рис. 4.2. Вызов метода в dispinterface с использованием IDispatch: :Invoke






ActiveX компоненты, действующие как клиенты были первоначально известен как контролеры автоматизации

Приложения могут использовать COM объекты, чтобы раскрыть их функции другому программному обеспечению

- Описывая Dispinterface

• Типы параметра, позволенные в методах dispinterface более простые, чем когда они позволены в методах интерфейса vtable

• Методы Dispinterface могут быть определены чтобы явно получить и установить свойства

Как интерфейсы vtable, интерфейсы dispinterface могут быть определены в IDL


- Dispinterface и Marshaling

Интерфейс Vtable может полагаться на proxy и stub для marshaling (выстраивание в определенном порядке)

dispinterface не требует свой собственный proxy и stub

• Параметры для метода dispinterface запакованы в вариант

Dispinterface позволяет позднее связывание, даже если никакая библиотека типов не доступна


- Пример Visual Basic

• вызов методов dispinterface из Visual Basic легкий
















Рис 4.3. Приложения обычно обеспечивают программируемость путем выполнения объектов, которые поддерживают IDispatch



Sub SpellCheckO

Dim Obj As Object

Set Obj = CreateObject("Excel.Application")

Word = InputBox("Enter Word")

If Object.CheckSpelling(Word) Then

MsgBox ("Valid Word")

Else

MsgBox ("Word not found")

End If End Sub


Visual Basic скрывает все детали

ProgID это читаемый для людей синоним CLSID



Документация приложения говорит программистам., какие методы приложение открывает

Автоматизированные клиенты обычно полагаются на библиотеку типов, чтобы изучить детали о методах объекта

- Интерфейс IDispatch

Методы : Invoke, GetIDsOfNames, GetTypeInfo, GetTypeInfoCount

- Поддержка множественных интерфейсов Dispinterface как одного объекта

Как и другие интерфейсы vtable, IDispatch имеет идентификатор интерфейса (IID)

Объект может позволить доступ к более, чем к одному dispinterface через Idispatch

Клиент может вызвать методы в dispinterface по умолчанию или явно запрашивает указатель на другой интерфейс


2. Дуальный интерфейс


Двойные интерфейсы

Методы в dispinterface проще для клиентов Visual Basic для вызова, чем клиентов С++ предпочитающих vtables

Двойной интерфейс обеспечивает выгоды, от обоих интерфейсов dispinterfaces и vtable

Двойной интерфейс - по существу IDISPATCH vtable, который расширен, чтобы включить прямые указатели на методы dispinterface

















Рис. 4.4. Двойной интерфейс открывает свои методы и через vtable, и через IDispatch.





Interface ISpellChecker : IDispatch {

import "unknown.idl" ;

import "oaidl.idi";

[propget] HRESULT BritishSpellings([out, retval] boolean *sp) ;

[propput] HRESULT BritishSpellings([in] boolean sp) ;

HRESULT LookUpWordt[in] BSTR word, [out] boolean *found) ;

HRESULT AddToDictionary([in] BSTR word)

}

[uuid(B623E460-1837-HCF-9946-444553 540000) ,

version(1.0)]

library SpellCheckerLib {

importlib("stdole32.tlb") ;

[uuid(B623E460-1837-llCF-9946-444553540000)],

coclass CoSpellChecker {

interface ISpellChecker

}

}




Рис. 4.5. Иллюстрация удаленной автоматизации




Все двойные интерфейсы наследуются от IDispatch

DISPID могут быть назначены автоматически

Обычно определяются новые интерфейсы как двойные

Удаленная автоматизация

Удаленная автоматизация позволяет методам в dispinterface и двойные интерфейсы, которые могут быть вызваны через сеть

Удаленная автоматизация это не тоже самое что DCOM

Удаленная автоматизация использует RPC между proxy и stub


Все вызовы методов проходят через proxy и stub на серверной машине, вызывающей

менеджера автоматизации

Автоматизация сегодня

Автоматизация сейчас означает программируемость, не просто использование IDispatch и dispinterfaces

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

  • Создание программируемых приложения позволяет другому программному обеспечению, также как и людям, использовать его сервисы. Обеспечение этой программируемости, использующей COM называется Автоматизацией



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


1.Что понимается под автоматизацией

2. Взгляды на автоматизацию: пользовательский, разработчика ПО

3.Дуальный интерфейс





Литература:

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


Тема 5. Постоянство


План:

1. Понимание постоянства

2. Структурная память для файлов

3. Контроль и постоянство объекта


1. Понимание постоянства


• Постоянные данные объекта - информация о состоянии объекта, которая сохранена между созданиями экземпляра объекта


Постоянный сервис позволяет объекту сохранять и загружать свои постоянные данные

Клиент объекта обычно контролирует, когда постоянные данные объекта загружаются и сохраняются

Структурная память это постоянный сервис, основанный на COM

Интерфейсы IPersist* позволяют клиентам контролировать постоянство объекта


2. Структурная память для файлов


Структурная память


Объект COM может сохранить свои постоянные данные многими способами

Структурная память позволяет множественные объекты COM, чтобы сохранить данные в одном файле.

Приложениям, создающим сложные документы, также необходимо разделять файл

Структурная память – это важный постоянный сервис в мире COM




  • Память и потоки

В структурной памяти, один дисковый файл становится сложным файлом, состоящим из памяти и потоков

Структурная Память по существу создает иерархическую файловую систему внутри каждого сложного файла

Каждой компоненте, использующей составной файл, назначен ее собственной памяти и/или потоку

Потоки и только потоки байтов с не системно определенной внутренней структурой

Каждая память и поток доступны через интерфейсы IStorage и IStream

Владелец памяти может свободно назначать названия потокам и памяти, которые он содержит содержит


Имя корня памяти – это тоже самое что название файла

Названия, начинающиеся с определенных символов зарезервированы для использования другим программным обеспечением

Сложные файлы обычно содержат потоки с итоговой информацией
















Рис. 5.1. Дисковый файл , содержащий память и потоки



























Рис 5.2. COM объект, использующий память и два потока

3. Контроль постоянства объекта


Контролирование постоянства объекта

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

Клиент обычно просит объект загрузить его постоянные данные через один из интерфейсов IPersist*

• Объект может поддерживать один или более интерфейсов IPersist*

Объект обычно не знает где найти свои постоянные данные. Это должно быть сказано его клиентом

- Интерфейсы IPersistStream и IPersistStreamInit

Объект поддерживает IPersistStream и IPersistStreamInit, если его постоянные данные могут быть сохранены в одном потоке

- Интерфейс IPersistStoragen

Объект поддерживает IPersistStorage, если его постоянные данные сохранены в одном или более потоках ниже памяти














Рис. 5.3 Иллюстрация интерфейсов IPersistStream и IPersistSreamInit
















Рис. 5.4. Иллюстрация интерфейса IPersistantStorage



-Интерфейс IPersistFile

Объект поддерживает IPersistFile, если его постоянные данные сохранены в обычном файле

-Интерфейс IpersistPropertyBag


Клиент COM объекта может захотеть сохранить эти данные объекта


Если объект поддерживает IPersistPropertyBag, он может сохранить свои постоянные данные в сумке с клиентно-обеспеченными свойствами

Клиенты объекта, поддерживающего IPersistPropertyBag, должен выполнить интерфейсы IPropertyBag и ErrorLog

Клиент, не объект, контролирует как и где свойства объектов сохранены

-Интерфейс IPersistMemoryInterface

Объект, который поддерживает IPersistMemory может передавать свои постоянные данные клиенту в большую разделенную память

















Рис. 5.6. Иллюстрация IPersistPropcrtyBag и связанных с ним интерфейсов


















Рис. 5.7 Иллюстрация интерфейса IPersistMemory

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

  • Постоянные данные объекта - информация о состоянии объекта, которая сохранена между созданиями экземпляра объекта

  • Имя корня памяти – это тоже самое, что название файла


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


1.Что понимается под постоянством?

2. Структурная память для файлов

3. Контроль постоянства объекта





Литература:

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

Тема 6. Моникеры


План

1. Что такое моникеры?

2. Асинхронный моникер


1. Что такое моникеры?


Обозначение объектного образца требует определение его методов и данных

Сам COM не предлагает способов обозначения образца объекта

Определение Моникера (Moniker

)

Моникер обозначает специфический образец объекта

• Моникер это объект, который поддерживает интерфейс Imoniker

Клиент может спросить moniker связать объект с именами moniker

Моникер может делать все захочет, чтобы создать и инициализировать объект, который он назвал

• Моникеры может сильно облегчить жизнь клиента

-Пример сложных документов

• Вставленные данные документа сохранены в его файле контейнера

Файл контейнера сохраняет только указатель на присоединенные данные документа

Указатель – это moniker


Что же действительно сохранено – это постоянные данные для moniker



















Рис. 6.1. Использование Моникера

















Рис. 6.2 Файл контейнера сохраняет постоянные данные для moniker, который обращается к присоединенному документу.





Пример базы данных


База данных OLE обеспечивает доступ основанный на COM к различным видам данных

Моникер может создать объект и затем инициализировать его с результатом из запроса к базе данных

Работа с Моникером

Классы Моникер

• Были определены различные стандарты классов moniker

• Постоянные данные файлового moniker –это название файла, пока постоянные данные элемента moniker строка символов

• Составной моникер ведет как контейнер упаковки других моникер


- Создание Моникер

Объект – названия moniker могут обеспечить постоянные данные moniker

Клиент может приобретать постоянные данные moniker многими другими путями

Выполнение обеспечивается для стандартных классов moniker




















Рис. 6.3. Пример постоянных данных для наиболее важных классов моникер.

























Рис. 6.4. Составной moniker с указателями на его три компонентных моникер.








Стандарт моникер– создает образец используя поставляемые в составе системы функций

Библиотека функций не доступна для нестандартных классов moniker

- Пример соединения моникер

Составной моникер обслуживает указатель на каждый из его компонентных моникер

Клиент видит только компонентный моникер

Компонентные морникер связываются справа налево

Если объект уже запущен, связывание может быть более эффективным

Запуск объектной таблицы позволяет моникер определить тот ли объект, чье имя запущено

Если его цель не достигнута, то элементный moniker вызывает BindToObject на моникер слева

моникер может использовать расширение имени файла, чтобы определить CLSID объекта

Объект, называемый файловым moniker, должен поддерживать IPersistFile

Элементные moniker полагаются на lOleltemContainer
























Рис 6.5. Каждый моникер полагается на моникер слева, надеясь избежать выполнения большей работы , чем необходимо.



















Рис. 6.6. Файловый и элементный моникер, инициализирующие свои объекты.


Элементный moniker использует I0leItemContainer::GetObject чтобы создать и инициализировать целевой объект


моникеры полезны с соединенными документами, но также имеет и более широкое применнение

Связывающий контекст поддерживает разделенную информацию, используемую в процессе связывания

Запущенная таблица объекта – это объект , который поддерживает интерфейс IRunningObjectTable

Моникер может запросить запущенную таблицу объекта для объекта, который моникер назвал

- Интерфейс IMonikerInterface

IMoniker –относительно сложный интерфейс

IMoniker наследует от IpersistStream


2. Асинхронный моникер


Асинхронные moniker не заставляют своего клиента ждать, пока он начинает и инициализирует объект

URL moniker это асинхронные monikers

URL monikerможет загрузить данные объекта по частям, нежели целиком

- Как асинхронные моникеры работают

Асинхронный клиент моникера выполняет IBindStatusCallback

Асинхронный моникер посылает клиенту указатель к его интерфейсу IBinding

Асинхронный моникер и его клиент связываются через методы в IBinding и IBindStatusCallback

Асинхронный моникер информирует своего клиента, когда больше данных или весь объект являются доступными

- Интерфейс IPersistentMoniker

Посредством поддержки IPersistentMoniker, объект может определить свои постоянные данные с моникер





Обобщенный подход к наименованию


Клиент может использовать одну или две библиотечные функции, чтобы направить общие символьные строки в моникеры

Обе функции могут положиться на коде со специфическим именем, чтобы создать соответствующий моникер

• Новый из двух, MkParseDisplayName, принимает названия URL-стиля

• Эти функции обеспечивают единственную точку входа в любое виртуальное именованное пространство













Рис 6.7. Интерфейсы поддерживаются асинхронным моникером и его клиентом






















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

  • Моникер обозначает специфический образец объекта

  • Моникер это объект, который поддерживает интерфейс Imoniker









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


1. Что такое моникеры?

2. Для чего необходимы моникеры?

3.Асинхронный моникер





Литература:

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

Тема 7. ActiveX управление

План

1. Эволюция ActiveX управления

2. Три взгляда на ActiveX управление

3. Методы и события в ActiveX управление


1. Эволюция ActiveX управления


Полезно определить стандарты для компонентов

ActiveX управление - программный компонент, который выполняет обычные задачи стандартными способами

Любые виды контейнеров управления доступны

Развитие управления AcriveX

VBX - более ранняя технология компонентов, созданная для Visual Basic

VBX был заменен OLE управлением

OLE управления теперь называются ActiveX управлением

Фактически нет никакого различия между ActiveX управлением и COM объектом

Компонентные категории


Управлениям первоначально давали регистрационное ключевое слово Control


Управление может теперь использовать компонентные категории, чтобы определить его возможности и требования

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




Компонентная категория может также указывать какое управление требует контейнер

CATID и CLSID не одно и тоже


2. Три взгляда на ActiveX управление



- Взгляд конечного пользователя

Конечный пользователь не знает, ActiveX управление используется

Контейнер управления и управление, которое он использует, напоминают одно приложение

- Взгляд разработчика приложения

Разработчик приложения включает средство управления в контейнер управления

Доступные контейнеры управления включают Visual Basic,web browsers и др.

Широкое разнообразие ActiveX управления можно приобрести

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

Во время проектирования, разработчик выбирает массив средств управления


• Разработчик устанавливает средство управления в форму

• Средство управления может иметь свойства




Средство управления может также посылать события

Контейнеры управления обычно позволяют разработчику прикреплять код к событиям

Sub SpinButtonl_SpinUp()

MsgBox("Up arrow clicked") End Sub


Sub SpinButtonl_SpinDown()

MsgBox("Down arrow clicked") End Sub

Во время выполнения, управление может делать несколько действий в ответ на щелчок мыши

ActiceX управление может быть очень простым или очень сложным

Средства управления имеют методы

Обычно более сложные средства управления предлагают более мощный набор методов

Средство управления предлагает свои методы через dispinterfaces

-Точка зрения конструктора управления

• Разработчик имеет несколько выборов как построить управление


Спецификация ActiveX управления определяет четыре главных аспекта Функциональных возможностей управления


Как работает управление

- Интерфейсы для управления и для контейнеров управления

• Каждый контейнер управления должен выполнить некоторые интерфейсы

Даже приложения, которые не являются контейнерами управления, могут использовать средства управления

Контейнер управления должен функционировать правильно даже с простым средством управления

- Обеспечение пользовательского интерфейса

Средство правления обеспечивает пользовательский интерфейс, используя

  • OLE внедрение и активизация на месте

ActiveX управления это обычно внутри процессные серверы

Средство управления может поддерживать внутренюю/ внешнюю активацию

Код управления не загружен, пока он станет необходимым


3. Методы и события в ActiveX управление


- Методы

Методы средства управления определяются в обычном dispinterface

ActiveX управление обычно поддерживает библиотеку типов

-События

• Средство управления может отправить события в свой контейнер

• Событие это метод, который управление вызывает в свой контейнер

• Контейнер выполняет интерфейс для событий управления

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

Управление может поддерживать IProvideEClassInfo2, чтобы дать контейнерный доступ к его библиотеке типов

Контейнер использует соединения точек, чтобы передать указатель dispinterface события управлению

-Свойства

• К свойствам управления обращаются через dispinterface методы







Страницы свойств обеспечивают стандартный способ, чтобы проверить и установить свойства управления

Каждая страница свойств обрабатывается отдельным COM объектом


Контейнер может также изучить изменения в свойствах


Управление может хранить его свойства многими способами

Который из IPersist* интерфейсов поддерживает управление, зависит от того, как он хранит свои постоянные данные

Управление изучает свою среду через окружающие свойства своего контейнера

Контейнер может поддерживать расширенные свойства

  • IOleControl и IOleControlSite интерфейсы


Лицензирование

Контролирование незаконного копирования программного обеспечения, представляет трудную проблему

Лицензирование обеспечивает способ ограничения полезности контроля копирования

Лицензирование основывается на IclassFactory

Глобальная лицензия для управления могла бы существовать на специальной машине

Контейнер может принести вместе с этим лицензию для управления

• Контейнер может приобретать лицензию для управления прежде, чем контейнер запакован для отгрузки

Никакие стандарты не определены для описания или сохранения лицензионных ключей


  • Расширения ActiveX управления

Спецификация средства управления 96 расширяет текущее определение ActiveX управления

Новые особенности также были добавлены, чтобы сделать ActiveX управление более подходящим для Internet





Рис. 7.1. Взгляд пользователя на простое приложение, использующее ActiveX управление




















Рис. 7.2. Взгляд разработчика на создание простого приложения, используя Visual Basic и ActiveX управление.






















Рис. 7.3. В ответ на щелчок мышью, появляется message box.






















Рис. 7.4. Четыре основных аспекта функциональных возможностей ActiveX управления.

























Рис. 7.5. Стандартные интерфейсы для ActiveX управления.























Рис7.6. Стандартный интерфейс для контейнера ActiveX управления.






















Рис. 7.7. Интерфейсы, используемые управлением и контейнером управления для отправки событий.
























Рис. 7.8. Использование страницы свойств объектов, чтобы модифицировать свойства управления

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

  • CATID идентификатор категории

  • CLSID идентификатор класса

  • OLE control теперь называется ActiveX control


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


1. Развитие ActiveX управления

2. Три взгляда на ActiveX управление

3. Методы и события в ActiveX управление





Литература:

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


Тема 8. Однородная передача данных и соединяемые объекты

План

1. Однородная передача данных

2. Соединение объектов


1. Однородная передача данных


Традиционно, имелось много различных способов перемещения данных между приложениями

Однородная передача данных обеспечивает единственную схему для перемещения данных между приложениями

Технология соединяемых объектов позволяет объектам отправлять события своим клиентам

Однородная передача данных

• Однородная передача данных зависит от IDataObject

-Объекты данных

• Объект выполняющий IDataObject известный как объект данных

IDataObject позволяет доступ к данным из любого источника

• Структура FORMATETC описывает пересылаемые данные

• Структура STGMEDIUM описывает где данные хранятся

Используя методы IDataObject, объект может читать данные, записывать данные и выполнять другие задачи, связанные с пересылкой данных

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















Рис. 8.1. Через IDataObject клиент имеет доступ к данным из многих источников



• “Перетащить и бросить” передает указатель IDataObject

  • Уведомление


Объект может информировать своего клиента относительно изменений к данным через уведомление

Объект данных может отправить уведомление своему клиенту через методы в IAdviseSink

Вызов метода OnDataChange информирует клиента о изменениях в данных

Потребитель вызывает IDataObject: :Dadvise, чтобы установить связь с источником

Потребитель вызывает IDataObject: :Dunadvise, чтобы прервать связь с источником

IAdviseSink полезен только в специфических настройках


2. Соединение объектов


Соединяемые объекты

Объектам иногда необходимо вызывать методы их клиентов

Соединяемые объекты обеспечивают генетический способ, чтобы установить двустороннюю связь между объектом и клиентом






Рис.8.2. Использование IAdviseSink с IDataObject.



-Соединяемые точки и приемники

• Объект, который поддерживает выходящий интерфейс, знает как действовать как клиент для этого интерфейса

Соединяемый объект должен поддерживать IConnectionPointContainer

Соединяемый объект может вызывать методы в несколькие различные приемники


-Интерфейс для соединяемых объектов

Клиент должен послать указатели соединяемого объекта приемнику клиента для исходящего интерфейса

IConnectionPointContainer – простой интерфейс, содержащий только два метода

IConnectionPointContainer позволяет клиенту узнать клиенту о точках соединения объекта

Методы в IConnectionPoint используются, чтобы установить и удалить соединения

Точки соединения могут быть представлены как обобщенная версия как

IDataObject и IAdviseSink обеспечивают уведомление

- Будущее соединяемых объектов




Рис.8.3. Соединяемый объект, его точки соединения и приемники клиента









Рис. 8.4. Установка и использование соединения.




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

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

  • Однородная передача данных обеспечивает единую схему для перемещения данных между приложениями


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


1. Что понимается под однородной передачей данных?

2. Соединение объектов





Литература:

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






Тема 9. Распределенный СОМ

План

1. Создание удаленного объекта

2. Использование моникера в распределенном COM

3 Средства безопасного доступа для удаленных объектов


1. Создание удаленного объекта


DCOM позволяет объектам быть созданными и использованы на удаленных машинах

DCOMобеспечивает доступ к распределенным сервисам безопасности

Создание удаленного объекта

- Использование CoCreateInstance

Клиент может создать удаленный объект, используя CoCreateInstance

Где созданный объект может быть сконфигурирован в системном реестре

Как названа удаленная машина зависит от протокола, используемого, чтобы получить доступ к этой машине

Создание удаленного объекта требует только один пробег вокруг сети

- Используя CoCreateInstanceEx

Клиент может создать удаленный объект с CoCreateInstanceEx