АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Оголошення автоматизованих властивостей і методів

Читайте также:
  1. II. Оголошення теми й мети уроку
  2. А Проголошення ЗУНР 9ноября 1918
  3. Аналіз частотних властивостей імітаторів активного опору
  4. Аномалії характеру і акцентуації індивідуально-психологічних властивостей особистість.
  5. Вибір методів атестації.
  6. Вибір методів виховання
  7. Вибір методів розрахунку ставок дисконтування
  8. Вивчення методів вимірювання температури. Перевірка термометрів
  9. ВИВЧЕННЯ СПОЖИВНИХ ВЛАСТИВОСТЕЙ І МОРФОЛОГІЧНОГО СКЛАДУ РИБИ
  10. ВИВЧЕННЯ ФІЗИЧНИХ ВЛАСТИВОСТЕЙ РІДИН
  11. Види методів контролю витрат
  12. ВИЗНАЧЕННЯ ДЕЯКИХ ФІЗИЧНИХ ВЛАСТИВОСТЕЙ РІДИН

OLE Automation - це різновид механізму зв'язку Object Linking and Embedding, що дозволяє додаткам для Windows управляти іншим. Автоматизований контроллер OLE є додатком, який здатний автоматизувати інше застосування - автоматизований сервер OLE. По суті, OLE Automation є протоколом обміну, за допомогою якого контроллер управляє діями сервера. Всі компонентні об'єкти OLE, що експортуються автоматизованим сервером своїм контроллерам, є похідними від базового класу Tautoobject.

При створенні автоматизованого сервера необхідно визначити його інтерфейс з контроллером, що містить оголошення властивостей і методів OLE об'єкту з тим, щоб контроллер дістав до них доступ. Ніколи не видаляйте вже включені в інтерфейс властивості і методи - це приведе до помилок в роботі існуючих контроллерів. C++Builder використовує модифікатор _ automated у оголошеннях автоматизованого методу (Лістинг 3.13). Це оголошення може закінчуватися ще одним новим ключовим словом _ dispid яке асоціює значення ідентифікатора диспетчеризації OLE Automation з даною функцією. Myoleautoclass: Tautoobject

 

class

function(void) _dispid(1000); };

{ _automated: void_fastcall

Лістинг 3.13. Оголошення автоматизованого методу.

Правила видимості, визначувані цим ключовим словом, не відрізняються від правил видимості, оголошених в секції public. Єдина відмінність виявляється в тому, що інформація, що генерується компілятором, про типи властивостей і методів OLE Automation, робить можливим створення автоматизованих серверів.

C++Builder поставляється разом з прикладом (дивовижним по зовнішній простоті і лаконічності коди) взаємодії додатків контроллера і сервера за допомогою механізму OLE Automation. Цей приклад проливає світло на дану методику, викладену в системній документації вельми плутано і туманно. Автоматизований сервер Autosrv демонструє використання:

• компонентних об'єктів Tautoobject і Tautoclassinfo;

• методу Registerautoclass автоматизованого об'єктного класу для реєстрації сервера;

• властивостей і методів, оголошених з ключовим словом _ automated. Контроллер Autocon управляє сервером і демонструє:

• установку і вибірку властивостей об'єкту сервера;

• використання варіантів (детальна інформація про тип Variant міститься в параграфі 3.6.1.6 "Розширених типів даних Delphi".

Щоб випробувати на практиці що дає взаємодію додатків OLE Automation, виконаєте наступні дії:

=> По команді головного меню File [ Open Project відкрийте діалог вибору проектів. => Увійдіть до каталога...cbuilderexamplesappsautosrv => Виберіть проектний файл з ім'ям Autosrv і натисніть кнопку Open.

=> Командою головного меню Run | Run запустите процес компіляції і збірки автоматизованого сервера. => Знову відкрийте діалог вибору проектів, увійдіть до каталога

...Cbuilderexamplesappsautocon, виберіть проектний файл з ім'ям

Autocon і натисніть кнопку Open. => Запустите процес компіляції і збірки контроллера.

Вводячи повідомлення в області редагованого введення і натискаючи кнопки контроллера, ви можете моделювати деякі процеси управління сервером. отримуючи результати, які відображені на нижченаведених малюнках:

 

Мал. 3.4. Контроллер готує повідомлення і посилає його серверу.

Мал. 3.5. Контроллер приймає повідомлення, "оброблені" сервером.

Мал. 3.6. Контроллер знімає старе повідомлення з сервера.

Щоб дізнатися як реалізована така взаємодія, необхідно розібратися в текстах модулів автоматизованого сервера (Лістинг 3.14 і Лістинг 3.15) і контроллера (Лістинг 3.16 і Лістинг 3.17), які заслуговують того, щоб привести їх повністю, забезпечивши необхідними коментарями. Сервер містить єдиний об'єкт Edit1 компоненти Tedit для редагованого введення і прийому повідомлень від контроллера у властивість Text. Контроллер записує введене користувачем повідомлення у властивість Text свого об'єкту Edit1, а управляє сервером за допомогою трьох кнопок Buttoni, Button2 і Buttons компоненти Tbutton (з назвами "Послати", "Прийняти" і "Очистити").

#ifndef Auto2h

#define Auto2h

ftinclude <Classes.hpp> ftinclude <01eauto.hpp>

#include <System.hpp>

// Клас сервера Buttonserver. похідний від Tautoob-iect class Buttonserver: public Tautoobject {

// Приватні властивості і методи Ansistring _ fastcall Geteditstr();

private:

Seteditstr(Ansistring Newval);

void _fastcall

Geteditnum();

int _fastcall

Seteditnum(int Newval);

void _fastcall

// Автоматизовані властивості і методи property Ansistring Editstr = // властивість типу Ansistring / / з атрибутами функції читання/запису значенні {read=geteditstr, write=seteditstr};

_automated:

Editnum = // властивість типу int / / з атрибутами функцій читання/запису значень {read=geteditnum, write=seteditnum); : Clear (); // метод очищення повідомлення void_fastcall Setthreestr // метод складання текстового / / повідомлення з рядків в параметрах si, s2, s3 типу Ansistring (Ansistring si, Ansistring s2, Ansistring s3);

property int

void _fastcall

void _fastcall Setthreenum // метод складання текстового / / повідомлення з чисел в параметрах п 1, п2, п3 типу int (int п1, int п2, int п3); // Загальнодоступні властивості і методи Buttonserver Про; // конструктор об'єкту сервера

public:

_fastcall

};

//----------------------------------------------------------

#endif

Лістинг 3.14. Файл оголошень Auto1.h модуля автоматизованого сервера.

#include <vcl.h>

#pragma hdrstop

#undef Registerclass

#include "Auto2.h"

#include "Autol.h"

int Initialization();

static int Initializer = Initialization();

// Створення об'єкту автоматизованого сервера _ fastcall Buttonserver::buttonserver(): Tautoobject()

{ }

// Читання текстового значення автоматизованої властивості Ansistring _ fastcall Buttonserver::geteditstr() { return Forml->editl->text;

// Запис текстового значення автоматизованої властивості void _fastcall Buttonserver:-.SetEditStr (Ansistring Newval) { Forml->editl->text = Newval;

} // Читання чисельного значення автоматизованої властивості

int _ fastcall Buttonserver::GetEditNum()

val;

(int

sscanf(Forml->editl->text.c_str(), "%d" &val);

val;

return

// Запис чисельного значення автоматизованої властивості void _fastcall Buttonserver::seteditnum(int Newval){ Forml->editl->text = Newval;

}

// Очищення значення автоматизованої властивості void_ fastcall Buttonserver::clear() { Forml->editl->text = "";

// Складання текстового значення властивості з трьох рядків void _ fastcall Buttonserver::setthreestr (Ansistring si, Ansistring s2, Ansistring s3) { Forml->editl->text = si + ", " + s2 + ", " + s3;

) // Складання текстового значення властивості з трьох чисел Buttonserver::setthreenum (int nl int n2 int n3) { Ansistring sl(nl), s2(n2), s3(n3);

void _fastcall

Forml->editl->text = si + ", " + s2 + ", " + s3;

void _fastcall Registerbuttonserver() { Tautoclassinfo Autoclassinfo;

// Реєстрація об'єкту автоматизованого сервера

// Ініціалізація полів структури типу Tautoclassinfo Autoclassinfo.AutoClass = _classid(Buttonserver);

Autoclassinfo.ProgID = "Bcbautosrv.EditServer";

Autoclassinfo.ClassID =

"{61e124e1-c869-11cf-9ea7-ooa02429b18a}";

Autoclassinfo.Description =

"Borland C++builder Autosrv Example Server Class";

Autoclassinfo.Instancing = acmultiinstance;

// Реєстрація класу автоматизованого сервера Automation->registerclass(Autoclassinfo);

}

// Ініціалізація об'єкту автоматизованого сервера Initialization()

int

{ Registerbuttonserver();

0;

return

}

Лістинг 3.15. Кодовий файл Auto2cpp модуля автоматизованого сервера.

#ifndef AUTOLH #efine AUTOLH

Tformi: public Tform {

class

// Ide-managed Components

published:

Tedit *Editl;

Tbutton *Buttonl

Tbutton *Button2

Tbutton *Button3

Tlabel * Label 1;

Buttonlclick(Tobject *Sender);

void _fastcall

Button2click(Tobject * Sender);

void _fastcall

Button3click(Tobject * Sender);

void _fastcall

// User declarations

private:

Variant Autoserver;

// User declarations

public:

Tformi(Tcomponent *0wner);

virtual _fastcall

Tformi *Forml;

extern

#endif

Лістинг 3.16. Файл оголошень Auto1.h, всі рядки якого (за винятком виділеного рядка оголошення варіанту) C++Builder генерує автоматично при розміщенні компоненів на формі контроллера.

include <vcl.h> #pragma hdrstop

#include "autol.h"

#pragma resource "*.dfm" #ormi *Forml;

_ fastcall Tformi::tformi(Tcomponent *0wner): Tform(Owner){ try

{ // Створення автоматизованого сервера як об'єкту OLE Autoserver = Createoleobject("Bcbautosrv.Edit Server");

}

(...) { // Обробка виключення

catch

Showmessage("Спочатку компілюйте і запустите Autosrv");

Application-terminate ();

}

} // Обробник події при натисненні кнопки Buttoni Tformi::buttonlclick(Tobject *Sender){ // Установка автоматизованої властивості сервера Autoserver.OlePropertySet("Editstr", Editl->text);

void _fastcall

)

// Обробник події при натисненні кнопки Button2

void _ fastcall Tformi::button2click(Tobject *Sender)

{ // Читання автоматизованої властивості сервера

Editl->text = Autoserver.OlePropertyGet("Editstr");

// Обробник події при натисненні кнопки Button3 void _ fastcall Tformi::button3click(Tobject *Sender){ // Очищення автоматизованої властивості сервера Autoserver.OleProcedure("Clear");

Лістинг 3.17. Кодовий файл Auto1.cpp модуля контроллера.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.011 сек.)