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