Създаване на вътрешен сървър за автоматизация

Точно както изграждането на сървъри от процес започва с изграждането на отделни приложения, така и изграждането на сървъри на процеси започва с изграждането на DLL. Можете да използвате съществуваща DLL библиотека или да създадете напълно нова, като щракнете двукратно върху иконата DLL в диалоговия прозорец Нови елементи (Елемент от менюто Файл Ново).

За повече информация относно техниките за разработка на DLL вижте главата

6, „Динамично свързани библиотеки“. Този раздел предполага, че читателят вече е запознат със създаването на такива приложения.Както беше споменато, за да функционира успешно като сървър за вътрешна автоматизация, DLL трябва да експортира четири функции, дефинирани в модула ComServ: DllGetClassObject (), DllCanUnload- Now (), DllRegisterServer () и DllUnregisterServer (). Добавете тези четири функции към раздела за експортиране на проекта, както е показано в листинг 15.5.

Листинг 15.5. IPS.dpr - вътрешен файл на сървърния проектбиблиотека IPS;

IPSMain в „IPSMain.pas“,

IPS_TLB в „IPS_TLB.pas“;

изнася DllRegisterServer, DllUnregisterServer, DllGetClassObject, DllCanUnloadNow;

начало край Обектът за автоматизация се добавя към DLL проекта по същия начин, както към изпълнимия проект, използвайки съветника за обекти на автоматизация. За този проект нека добавим само едно свойство и един метод, както е показано на фиг. 15.7. Версията Object Pascal на библиотеката с типове е показана в листинг 15.6.

сървър

Листинг 15.6. IPS_TLB.pas - файл за импортиране на библиотеката от типове за проекта на вътрешния сървър

// Типовете, декларирани в този файл, са създадени от данни

// библиотеки тип. Ако този тип библиотека е изрично или

// индиректно (чрез библиотека от друг тип, препращаща към това

// библиотека тип) се импортира отново или с помощта на командата

// ‘Refresh’ в прозореца на редактора на библиотека с типове се активира по време на

// редактиране на библиотека с типове, след което цялото съдържание на този файл

// ще бъде пресъздаден и всички направени промени

// от потребителя ръчно, ще бъдат загубени.

// PASTLWTR: $ Ревизия: 1.130.3.0.1.0 $

// Файл, създаден на 01.10.2001 01:06:49 от библиотека с типове,

// Напишете Lib: G: \ Doc \ D6DG \ Source \ Ch15 \ Automate \ IPS.tlb (1)

// (1) v1.0 stdole, (C: \ WINNT \ System32 \ stdole32.tlb)

// (2) v2.0 StdType, (C: \ WINNT \ System32 \ olepro32.dll)

// (3) v1.0 StdVCL, (C: \ WINNT \ System32 \ stdvcl32.dll)

// Модулът трябва да се компилира без

// указатели, проверени за тип.

// GUID се декларират в TypeLibrary. Използват се следните префикси:

// Тип библиотеки: LIBID_xxxx

// Не-DISP интерфейси: IID_xxxx

// Основна и второстепенна версии на библиотеката с типове

// Деклариране на класовете компоненти, дефинирани в библиотеката на типове

// (ЗАБЕЛЕЖКА: Това описва всеки коклас с

// със стандартния си интерфейс)

// Флагове: (4432) Скрито двойно OleAutomation изпращане

функция Get_MessageStr: WideString; безопасно обаждане;

процедура Set_MessageStr (const Стойност: WideString); безопасно обаждане;

функция ShowMessageStr: Integer; безопасно обаждане;

свойство MessageStr: WideString чете Get_MessageStr

// Флагове: (4432) Скрито двойно OleAutomation изпращане

свойство MessageStr: WideString dispid 1;

функция ShowMessageStr: Integer; диспид 2;

// Класът CoIPTest предоставя методите Create и CreateRemote за

// създаваме екземпляри на стандартния интерфейс IIPTest,

// предоставен от кокласа IPTest. Тези функции

// са за използване от клиенти, желаещи да използват

// инструментите за автоматизация използват компонентни обекти

// класове, предоставени от сървъра на библиотеката от този тип.

клас функция Създаване: IIPTest;

клас функция CreateRemote (const MachineName:

край; изпълнението използва ComObj;

низ): IIPTest; функция клас CoIPTest.Create: IIPTest;

Резултат: = CreateComObject (CLASS_IPTest) като IIPTest;

клас функция CoIPTest.CreateRemote (const MachineName:

CLASS_IPTest) като IIPTest;

край Очевидно горното е най-простият пример за сървър за автоматизация, но това е само за илюстрация. На свойството MessageStr може да бъде присвоена стойност, която след това може да бъде показана с помощта на функцията ShowMesageStr (). Интерфейсът IIPTest е реализиран в модула IPSMain.pas, който е показан в листинг 15.7.

Листинг 15.7. IPSMain.pas - основният модул на проекта за вътрешен сървър за автоматизация

TIPTest = клас (TAutoObject, IIPTest)

функция Get_MessageStr: WideString; безопасно обаждане;

процедура Set_MessageStr (const Стойност: WideString); безопасно обаждане;

функция ShowMessageStr: Integer; безопасно обаждане;

използва Windows, ComServ; функция TIPTest.Get_MessageStr: WideString;

функция TIPTest.ShowMessageStr: Цяло число;

MessageBox (0, PChar (MessageStr), 'Вашият низ е ...', MB_OK);

процедура TIPTest.Set_MessageStr (const Стойност: WideString);

TAutoObjectFactory.Create (ComServer, TIPTest, Class_IPTest,

Както бе споменато в тази глава, вътрешните сървъри се регистрират по различен начин от външните сървъри. Функцията DllRegisterServer () се извиква, за да се регистрира във системния регистър на вътрешния сървър. В IDE на Delphi този процес е много прост, просто изберете Регистриране на ActiveX сървър от менюто Изпълнение.

Източник: Teixeira, Steve, Pacheco, Xavier. Borland Delphi 6. Ръководство за разработчици.: Per. от английски - М .: Издателство Уилямс, 2002. - 1120 с.: аз ще. - Паралелно. синигер Английски.