Интересности по COM, страница 2
Описание файла
Документ из архива "Интересности по COM", который расположен в категории "". Всё это находится в предмете "проектирование программного обеспечения автоматизированных систем" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "проектирование по автоматизированных систем" в общих файлах.
Онлайн просмотр документа "Интересности по COM"
Текст 2 страницы из документа "Интересности по COM"
• 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 и