Главная страница

Разработка интегрированных прикладных программ (Меньшикова К. Г.). Разработка интегрированных прикладных программ (Меньшикова К. Г.. Методическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика


Скачать 313.5 Kb.
НазваниеМетодическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика
АнкорРазработка интегрированных прикладных программ (Меньшикова К. Г.).doc
Дата19.03.2019
Размер313.5 Kb.
Формат файлаdoc
Имя файлаРазработка интегрированных прикладных программ (Меньшикова К. Г..doc
ТипМетодическое пособие
#26104
КатегорияИнформатика. Вычислительная техника
страница4 из 9
1   2   3   4   5   6   7   8   9

2.2.Контроллер на C++Builder (позднее связывание)


Приложения, управляющие серверами автоматизации, называются контроллерами автоматизации. Создадим контроллер, управляющий сервером «День недели», основываясь на информации о методах класса его объекта автоматизации.

На рис. 3 представлено окно контроллера, содержащее кнопки для установки и разрыва связи с объектом, флажок видимости сервера и кнопки управления свойством Visible, а также кнопки для получения данных, метки для отображения данных в окне, поле Edit1 для ввода даты. После запуска контроллера (при нажатии кнопки Connect) запускается сервер. При нажатии кнопки Disconnect он выгружается. Кнопка SetVisible проявляет и скрывает окно сервера в зависимости от наличия флажка на компоненте CheckBox1, но и будучи невидимым, сервер продолжает выполнять свои функции. Нажатие кнопки GetVisible приводит флажок в соответствие значению свойства Visible сервера.


Рис. 3

Чтобы общение с COM-объектом сервера стало возможно, в модуль следует включить строку #include .

Для управления сервером следует создать переменную Serv типа Variant, во время работы она будет содержать указатель на интерфейс IDispatch COM-объекта. Для создания экземпляра COM-объекта можно использовать функцию CreateOleObject из модуля ComObj библиотеки VCL: Variant Serv;

Serv=CreateOleObject("Project_DayWeek.DayWeek");

Эта функция создаст IDispatch и вернет указатель на него. IDispatch дает доступ к диспетчерскому интерфейсу объекта сервера, методы которого мы хотим вызывать. Для создания объекта CreateOleObject вызывает функцию CoCreateInstance, являющуюся частью спецификации COM Windows API.

Прерывание связи контроллера с сервером:

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

Выражение VarType(Serv)==varDispatch проверяет, содержит ли вариантная переменная Serv указатель на диспетчерский интерфейс. Эта проверка производится перед любым обращением к объекту сервера. Обращение к процедурам сервера осуществляет метод OleProcedure, первым параметром которого является имя метода диспетчерского интерфейса, а остальные – фактические параметры этого метода. Примеры таких вызовов:

WideString s, str1, str2; int n;
// Вызов метода Today:
if (VarType(Serv)==varDispatch)
Serv.OleProcedure("Today",&s);
// Вызов метода Data_Day:
str1=Edit1->Text;
if (VarType(Serv)==varDispatch)
Serv.OleProcedure("Data_Day",str1,&n,&str2);

За работу со свойствами COM-объекта отвечают методы OlePropertyGet и OlePropertySet. Примеры работы со свойством Visible нашего сервера:

// Установить значение свойства по заданию пользователя:
if (VarType(Serv)==varDispatch)
Serv.OlePropertySet("Visible",CheckBox1->Checked);
// Запросить у сервера значение свойства:
if (VarType(Serv)==varDispatch)
CheckBox1->Checked=Serv.OlePropertyGet("Visible");

2.3.Контроллер позднего связывания (Delphi)


Код контроллера позднего связывания в Delphi будет выглядеть проще, так как в этом случае можно обращаться к методам и свойствам объектов внутри вариантных переменных. При позднем связывании может быть заранее неизвестно, существуют ли такие свойства и методы. Просто компилятор не проверяет их наличие, а воспринимает их названия как обычную символьную строку. Ошибки в этом случае проявятся лишь на этапе выполнения программы.

Для связи с сервером понадобится переменная типа Variant. Serv:Variant, а в секции uses должны присутствовать ссылки на модули Variants и ComObj.

Рассмотрим код контроллера. Установка связи и разрыв связи с сервером выполняются точно также, как и при создании контроллера в Builder C++:

if VarType(Serv)<>varDispatch then
Serv:=CreateOLEObject('Project_DayWeek.DayWeek');
if VarType(Serv)=varDispatch then
Serv:=Unassigned;

Операторы установки и получения значения свойства Visible сервера будут выглядеть так, как будто речь идет о свойстве обычного компонента среды Delphi:

if VarType(Serv)=varDispatch then
Serv.Visible:=CheckBox1.Checked;
if VarType(Serv)=varDispatch then
CheckBox1.Checked:=Serv.Visible;

Для получения текущей даты и дня недели потребуется объявить переменную специального типа WideString (аналог типа BSTR):

var str:WideString;
Serv.Today(str); Label1.Caption:=str;

При обращении к методу Data_Day придется объявить переменные для получения результатов (тип WideString и integer), а входную строку можно взять прямо из поля Edit1.Text:

var str:WideString; i:integer;
Serv.Data_Day(Edit1.Text,i,str);
Label2.Caption:=str; Label3.Caption:=IntToStr(i);
1   2   3   4   5   6   7   8   9


написать администратору сайта