Создание контроллеров автоматизации



Создание контроллеров автоматизации с помощью C++Builder - часть 2


//———————————————————————————————

void __fastcall TForm2::Button11Click(TObject *Sender)

{

if (VarType(Serv)==varDispatch) Serv=Unassigned;

}

//———————————————————————————————

void __fastcall TForm2::Button5Click(TObject *Sender)

{

if (VarType(Serv)==varDispatch)

{if (OpenDialog1->Execute())

Serv.OleProcedure(“OpenFile”,OpenDialog1->FileName);}

}

//———————————————————————————————

void __fastcall TForm2::Button6Click(TObject *Sender)

{

if (VarType(Serv)==varDispatch)

{ if (SaveDialog1->Execute())

Serv.OleProcedure(“SaveFile”,SaveDialog1->FileName);}

}

//———————————————————————————————

void __fastcall TForm2::Button7Click(TObject *Sender)

{

if (VarType(Serv)==varDispatch) Serv.OleProcedure(“NewFile”);

}

//———————————————————————————————

void __fastcall TForm2::Button4Click(TObject *Sender)

{

if (VarType(Serv)==varDispatch) Serv.OleProcedure(“AddLine”,Edit1->Text);

}

//———————————————————————————————

Некоторые комментарии

Теперь настало время пояснить, что именно делает приведенный выше код. Для управления сервером автоматизации мы создали переменную типа Variant (в C++Builder для этой цели имеется соответствующий класс) и вызвали функцию CreateOleObject, содержащуюся в модуле ComObj библиотеки VCL.

При выполнении функции CreateOleObject произойдет следующее. Эта функция, вызвав несколько функций Win32 API, создаст экземпляр COM-объекта IDispatch и вернет его внутри вариантной переменной. Этот объект, в свою очередь, содержит интерфейс объекта (в данном случае нашего сервера автоматизации), методы которого мы хотим вызывать из приложения. Если исследовать реализацию функции CreateOleObject в исходном тексте модуля ComObj, можно обнаружить, что она, в свою очередь, вызывает функцию Win32 API CoCreateInstance, являющуюся частью спецификации COM, назначение которой — создать объект из исполняемого файла или DLL. Переменная типа Variant может содержать разнообразные данные (строку, число и др., в том числе и интерфейс COM-объекта).




Содержание  Назад  Вперед