Скачиваний:
100
Добавлен:
01.05.2014
Размер:
1.56 Mб
Скачать

Создание приложения, подлежащего автоматизации

Для создания сервера автоматизации следует создать обычное приложение и затем добавить к нему описание класса СОМ-объектов, создаваемых этим приложением, для осуществления доступа к функциональности, которую нужно автоматизировать.

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

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

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

Memo1->Lines->Clear ();

}

void __fastcall TForm1::SpeedButton2Click(TObject *Sender)

{

if (OpenDialog1->Execute ())

{

Memo1->Lines->LoadFromFile (OpenDialog1->FileName);

}

}

void __fastcall TForm1::SpeedButton3Click(TObject *Sender)

{

if (SaveDialog1->Execute ())

{

Memo1->Lines->SaveToFile (OpenDialog1->FileName);

}

}

void __fastcall TForm1::SpeedButton4Click(TObject *Sender)

{

Close ();

}

Сохраним проект. Отметим, что пока созданный нами текстовый редактор представляет собой обычное Windows-приложение и не является сервером автоматизации.

Превращение приложения в сервер автоматизации

Для превращения созданного нами выше приложения в сервер автоматизации выберем элемент Automation Object со страницы ActiveX репозитария объектов.

Введем имя класса, под которым данный класс СОМ-объектов будет зарегистрирован в реестре.

После этого мы окажемся в редакторе библиотеки типов (Type Library Editor), в котором нам предстоит определить свойства и методы созданного класса СОМ-объектов.

Библиотека типов

По существу библиотека типов представляет собой двоичный файл с описанием интерфейсов СОМ-объекта и их методов.

Обычно такие описания создаются с помощью специального языка IDL (Interface Definition Language) и используются для того, чтобы разработчики знали, как создать код, реализующий методы СОМ-объекта (или вообще методы объекта, расположенного за пределами адресного пространства разрабатываемого приложения, так как IDL используется не только в СОМ-технологии, но и в иных технологиях, реализующих вызовы удаленных процедур или функций, например CORBA). Помимо этого, описания методов на языке IDL могут быть использованы для автоматической генерации серверного и клиентского кода (так называемого proxy-кода и stub-кода) с помощью соответствующих утилит.

С другой стороны, proxy-код и stub-код для клиента и сервера могут быть сгенерированы динамически. В этом случае клиент должен динамически получать информацию о свойствах и методах интерфейсов СОМ-объекта, и тогда наличие библиотеки типов, содержащей такую информацию, может быть весьма удобно. Отметим, что библиотеку типов можно в принципе сгенерировать на основе описания на языке IDL с помощью специального компилятора MIDL, но в данном случае в этом нет необходимости.

Итак, приступим к редактированию библиотеки типов. Предположим, что мы хотим автоматизировать загрузку файла в окно редактора, сохранение набранного текста, очистку окна редактирования, определение и изменение ширины и видимости окна. Создадим также метод, добавляющий строку к редактируемому тексту. С этой целью опишем для нашего сервера методы FileNew,FileOpen,FileSave,AddLineи их параметры, а также свойстваWidthиVisible.

Отметим, что типы данных, используемые для описания параметров методов, не совпадают с типами данных C++, так как в этом случае используются типы данных, принятые в IDL. Наиболее часто используемые типы данных языка IDL приведены в таблице .

short

2-байтовое целое число со знаком

long

4-байтовое целое число со знаком

single

4-байтовое действительное число

double

8-байтовое действительное число

BSTR

двоичная строка

DATE

дата

VARIANT_BOOL

true = -1, false = 0

VARIANT

Указатель на вариантную переменную

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

МетодNewFileпараметров не имеет. МетодыOpenFileиSaveFileимеют один строковый параметр типаBSTR- имя файла. МетодAddLineтакже имеет один строковый параметр, задающий добавляемую строку. СвойствоVisibleимеет логический типVARIANT_BOOL, при этом оно может быть как прочитано, так и изменено. СвойствоWidthимеет целый типlong(число пикселов) и также доступно как для чтения, так и для записи.