- •Проблемы, решаемые с помощью технологии com
- •Основные понятия
- •Именование com-объектов
- •Понятие интерфейса
- •Основы компиляции
- •Простейший пример использования
- •Интерфейс iUnknown
- •Еще один пример
- •Com-сервер
- •Создание "настоящего" com-сервера.
- •Фабрика классов
- •Использование фабрики классов
- •ITypeLib, iTypeInfo, библиотеки типов и информация о методах сервера. Язык idl.
- •IDispatch и вызов методов "по имени"
- •IMarshall, маршалинг и взаимодействие клиента с внутренними, локальными и удаленными серверами
- •Технология ole Внедрение и связывание объектов - ole
- •Использование ole-документов в приложениях
- •Использование свойств OleContainer
- •Создание элементов управления ActiveX Понятие ActiveX.
- •Создание элементов управления ActiveX на основе vcl-компонентов
- •Создание страниц свойств
- •Создание активных форм
- •Создание локальных серверов и контроллеров автоматизации Понятие автоматизации.
- •Создание приложения, подлежащего автоматизации
- •Превращение приложения в сервер автоматизации
- •Библиотека типов
- •Реализация методов объекта автоматизации
- •Создание контроллера
- •Раннее и позднее связывание
- •Создание контроллеров для произвольных серверов автоматизации
- •Коллекции объектов внутри серверов автоматизации
- •Использование информации из библиотек типов
- •Создание коллекций объектов
- •Экспонируемые свойства и методы
- •Процессы в Windows Процессы
- •Планирование потоков
- •Приоритеты
- •Привязка к процессорам
- •Создание процессов
- •Завершение процессов
- •Создание потоков
- •Завершение потоков
- •Wait функции
- •Синхронизация потоков
- •Синхронизация процессов
- •Взаимодействие между процессами
- •Создание внутренних серверов и контроллеров автоматизации Внутренний сервер автоматизации и передача данных
- •Создание внутреннего сервера автоматизации
- •Манипуляция ресурсами в dll
- •Работа внутреннего сервера автоматизации в многопоточном режиме Понятие многопоточности. Синхронизация
- •Класс tThread
- •Пример многопоточного приложения
- •Применение com-объектов, входящих в состав Windows Создание ярлыков
- •Использование Internet Explorer в приложениях
Создание коллекций объектов
Как было показано выше, в серверах автоматизации MS Office широко используются коллекции объектов. Во многих случаях представляется естественным употреблять их и в собственных серверах автоматизации, например в приложениях, ориентированных на работу с документами или какими либо иными однотипными объектами.
Если вернуться к простейшему примеру, рассмотренному ранее, мы можем обнаружить в нем подходящий объект для создания коллекции - строки, содержащиеся в окне текстового редактора. Модифицируем его, добавив свойстваLines(коллекция строк) иLineCount(число строк), методы для их считывания и метод для модификации строки с указанным номером.
Код реализации вновь введенных методов для считывания вновь введенных свойств LinesиLineCountи модификации свойстваLinesбудет выглядеть следующим образом:
STDMETHODIMP TMyAutoImpl::get_LineCount (int *Value)
{
*Value = Form1->Memo1->Lines->Count;
}
STDMETHODIMP TMyAutoImpl::get_Lines (int Index, BSTR *Value)
{
if (Index >= 0 && Index <= Form1->Memo1->Lines->Count)
{
*Value = Form1->Memo1->Lines[Index];
}
else
{
*Value = "";
}
}
STDMETHODIMP TMyAutoImpl::set_Lines (int Index, BSTR Value)
{
if (Index >= 0 && Index <= Form1->Memo1->Lines->Count)
{
Form1->Memo1->Lines[Index] = Value;
}
}
Теперь модифицируем контроллер, добавив несколько дополнительных интерфейсных элементов и несколько обработчиков связанных с ними событий.
Обработчики событий, связанные с нажатием на кнопки "Get Line Count", "Get Line", "Set Line", для C++Builder выглядят следующим образом:
void __fastcall TForm1::Button11Click (TObject *Sender)
{
Edit2->Text = IntToStr (serv.LineCount);
}
void __fastcall TForm1::Button12Click (TObject *Sender)
{
serv.Lines[StrTolnt(Edit2->Text)-1] = Edit1->Text;
}
void __fastcall TForm1::Button13Click (TObject *Sender)
{
Edit1->Text = serv.Lines[StrTolnt(Edit2->Text)-1];
}
Конструкция serv.Lines[StrTolnt(Edit2->Text)-1];использована в приведенном коде потому, что элементы массива, реализующего коллекцию, нумеруются не с единицы, а с нуля, тогда как строки на экране более привычно начинать нумеровать с единицы.
Экспонируемые свойства и методы
В принципе сервер автоматизации может содержать любые свойства и методы. Однако существует спецификация Microsoft на серверы автоматизации, которой следует руководствоваться при их создании. Ниже приведены список методов и свойств, которые согласно этой спецификации, должны быть реализованы. Следует обратить внимание на то, что здесь приведены два списка - один для сервера-приложения (табл. ), а другой - для сервера-документа (табл. ). В случае SDI-приложений (Single Document Interface - однодокументный интерфейс) они могут совпадать. Но в MDI-приложениях (Multiple Document Interface - многодокументный интерфейс) необходимо создавать отдельный сервер для документа. При этом он не должен регистрироваться в системном реестре, так как документ невозможно показать без приложения.
Свойства и методы объекта автоматизации приложения
Имя |
Тип/InOut |
Обязатель- |
Тип данных |
Описание |
|
|
ность(+) |
|
|
|
|
Желатель- |
|
|
|
|
ность(-) |
|
|
ActiveDocument |
Свойство/- |
- |
IDispatch, |
Активный документ |
|
|
|
Unassigned |
|
Application |
Свойство/- |
+ |
IDispatch |
Приложение |
Caption |
Свойство/+ |
- |
BSTR |
Заголовок |
|
|
|
|
приложения |
DefaultFilePath |
Свойство/+ |
- |
BSTR |
Путь по умолчанию. |
|
|
|
|
Используется для |
|
|
|
|
открытия/создания |
|
|
|
|
файлов по умолчанию |
Documents |
Свойство/- |
- |
IDispatch, |
Коллекция |
|
|
|
коллекция |
документов |
FullName |
Свойство/- |
+ |
BSTR |
Путь/имя приложения |
Height |
Свойство/+ |
- |
float |
Высота главной формы |
|
|
|
|
(режим MM_HIMETRIC) |
Help |
Метод |
- |
|
Показывает справку |
Interactive |
Свойство/+ |
- |
VARIANT_BOOL |
Изменение документов |
|
|
|
|
пользователем |
Left |
Свойство/+ |
- |
float |
Координата левого |
|
|
|
|
верхнего угла |
|
|
|
|
(режим MM_HIMETRIC) |
Name |
Свойство/- |
+ |
BSTR |
Краткое описание |
|
|
|
|
приложения |
Parent |
Свойство/- |
+ |
IDispatch |
= Application |
Path |
Свойство/- |
- |
BSTR |
Путь к приложению |
Quit |
Метод |
+ |
|
Закрытие приложения |
Repeat |
Метод |
- |
|
Повторяет последнюю |
|
|
|
|
команду пользователя |
StatusBar |
Свойство/+ |
- |
BSTR |
Содержимое |
|
|
|
|
панели состояния |
Top |
Свойство/+ |
- |
float |
Координата левого |
|
|
|
|
верхнего угла |
|
|
|
|
(режим MM_HIMETRIC) |
Undo |
Метод |
- |
|
Отменяет последнюю |
|
|
|
|
команду пользователя |
Visible |
Свойство/+ |
+ |
VARIANT_BOOL |
Видимость приложения |
Width |
Свойство/+ |
- |
float |
Ширина главной формы |
|
|
|
|
(режим MM_HIMETRIC) |
Свойства и методы объекта автоматизации документа из коллекции
Имя |
Тип/InOut |
Обязатель- |
Тип данных |
Описание |
|
|
ность(+) |
|
|
|
|
Желатель- |
|
|
|
|
ность(-) |
|
|
Activate |
Метод |
+ |
|
Делает документ активным |
Application |
Свойство/- |
+ |
IDispatch |
Объект приложения |
Author |
Свойство/+ |
- |
BSTR |
Имя автора |
Close |
Метод |
+ |
|
Закрывает документ |
Comments |
Свойство/+ |
- |
BSTR |
Комментарии к документу |
FullName |
Свойство/- |
+ |
BSTR |
Путь и имя файла |
|
|
|
|
с документами |
Keywords |
Свойство/+ |
- |
BSTR |
Ключевые слова |
Name |
Свойство/- |
+ |
BSTR |
Имя документа |
NewWindow |
Метод |
- |
|
Добавляет в документ |
|
|
|
|
новое окно |
Parent |
Свойство/- |
+ |
IDispatch |
Родитель документа |
Path |
Свойство/- |
+ |
BSTR |
Путь к файлу документа |
|
Метод |
+ |
|
Печать документа |
PrintOut |
Метод |
- |
|
|
PrintPreview |
Метод |
- |
|
Показ образца печати |
ReadOnly |
Свойство/+ |
- |
VARIANT_BOOL |
Возможность редактирования |
RevertToSave |
Метод |
- |
|
Откат всех изменений |
Save |
Метод |
+ |
|
Сохранение документа |
SaveAs |
Метод |
+ |
|
Сохранение документа |
|
|
|
|
под другим именем |
Saved |
Свойство/- |
+ |
VARIANT_BOOL |
документ не изменялся |
|
|
|
|
с момента сохранения |
Subject |
Свойство/+ |
- |
BSTR |
Сводка документа |
Title |
Свойство/+ |
- |
BSTR |
Заголовок документа |
В первой колонке таблицы указано название метода или свойства, под которым данный метод или свойство должны экспонироваться. Во второй колонке указаны тип - метод или свойство - и то, является ли свойство свойством "только для чтения" (-) или позволяет как чтение, так и запись (+). В третьей колонке указано, является ли метод/свойство обязательным для экспонирования (+) или желательным (-). В четвертой колонке указан тип данных для свойств. И наконец, в пятой колонке приведено краткое описание.
Можно заметить некоторое дублирование - например, имеются одинаковые методы PrintиPrintOut. Это связано с тем, что в Visual Basic есть внутренний методPrintи его использование может привести к путанице.
ПредыдущаяОглавлениеСледующая
ПредыдущаяОглавлениеСледующая