ПредишенСледващото

За да създадете Delphi COM-сървър предоставя набор от помощници, които автоматизират рутинните задачи и дават възможност на програмиста да се концентрира върху изпълнението на функционалност. Магьосниците са достъпни чрез командата на менюто File-> New, в раздела ActiveX
За да направите COM-сървър EXE-файл, просто трябва да се добави модул с помощта на COM-обекти. За създаване на COM-сървър, като DLL, трябва първо да се създаде библиотека, структурирани да отговарят на изискванията COM. Това се прави с помощта на съветника «ActiveX библиотека». С избора си на нов проект се създава и генерира DLL изпълнява следния код:

Създадена DLL изнася функции, необходими за COM и не може да се грижи за рутинната работа и веднага да започне да изпълнява COM-servera.Dlya направите това, изберете главния «COM-обект".
От запълване на полетата на тази форма зависи от изпълнението на COM създаване на нов обект
име име на класа Delphi клас, който реализира COM-сървъра. Съветникът създава празен клас със същото име. В рамките на едно и също име на COM-сървърът ще бъде вписан в регистъра.
Instansing Определя начина на създаване на COM-обекти. А параметър може да предприеме следните стойности: Вътрешен Обектът може да се използва само в рамките на заявлението. Единична съд Създаване на копие на всеки обект води до началото на нова инстанция на сървъра на приложения. След създаване на обект "Обект Фабрика" приложение премахва лична информация от списъка на система от регистрирани фабрики, която прави COM, за да създадете нов обект, за да стартирате сървъра в новото приложение процес Множествена инстанция след създаването например "фабрика" обект не се изважда от списъка на регистрираните. Когато създавате искане за нов COM обект ще го открие в този списък и да поиска създаването на една и съща фабрика, и ще се създаде нова инстанция на обекта в едно и също приложение. С други думи, да се създадат всички обекти от този тип budt работи не повече от един модел на сървър. Тази опция има смисъл само за EXE-сървъра, той се игнорира за DLL.

Threading модел Model стрийминг сървъра. Тази настройка зависи от вида на сървъра (EXE или DLL) Единична Няма поддръжка нишка. За DLL-сървър по време на регистрацията не обстановка ThreadingModel ще бъде създаден за EXE-сървър, за да укажете тази опция (за разлика от всеки друг) няма да се инсталира IsMultiThread флаг ще бъде зададен на ДАТ. Обикновено, този модел се използва за вътрешния сървър апартамент за сървъра DLL в регистъра ще се създаде възможност ThreadingModel = апартамент, за EXE - създаден MTA Както в регистъра за сървъра на DLL е - създадена STA Безплатна опция ThreadingModel = Франко, за да EXE ще бъде създаден за сървъра DLL в регистъра комплект параметър ThreadingModel = И двете, за EXE - създаден MTA

Включи Вид Библиотека Изберете това квадратче, за да бъдат включени в сървъра на тип библиотека - специален двоичен ресурс, който описва интерфейсите, изпълнявани на сървъра, техните методи и кол опции. COM предоставя стандартен начин за работа с библиотеки с типове. По-специално, Delphi да импортирате съществуваща в библиотеката тип сървър и автоматично да го надградите интерфейсен модул за работа с него. При използване на интерфейси тип библиотека, описани с помощта на библиотека Редактор. Целта наследява от TTypedComObject Ако тази опция е изключена, обектът е наследен от TComObject. Това е изпълнение на лек сървър.

Реализирани Интерфейси Това поле се допускат само ако обектът не използва тип библиотека. В този случай, трябва да се опише интерфейсите си в кода на програмата и ги вписва в тази област, като например «ITest, IAnotherTest»

Марк интерфейс Oleautomation Създаване този флаг прави COM-сървър, съвместим с OLE Automation. Вие трябва да използвате съвместим само с OLE автоматизация типове данни в методите на интерфейса. Това е необходимо, ако искате да се премине позоваване на посредник между различни "стаи". Подобна операция, наречена събирателен интерфейс изисква написването на специален пълномощник / мъниче DLL. Въпреки това, ако интерфейсът е маркирана като Oleautomation тази работа marshaller OLE и ще бъдат пощадени от излишна работа.
. В подкрепа на Oleautomation разпределителен необходимо: • сървърът е бил наследен от TTypedComObject (не се изисква изпълнение IDispatch) • Всички методи на интерфейса трябва да бъдат декларирани като safecall. Ако създадете интерфейс наследява IUnknown, а след това по подразбиране на всички свои методи са обявени за stdcall. За да създадете safecall методи трябва да Tools-> диалогов прозорец Опции за околната среда в раздела Type библиотека Ключ Safecall функция картографиране на стойността Всички о-маса интерфейси
Сървър без тип библиотека
Такъв сървър, ако тя не изпълни IMarshall интерфейс може да работи само в една "стая" на клиента, така че трябва да се използва само за В-Process сървър с стрийминг модел е идентичен с клиента.
Когато създадете сървър, който не е включен в библиотеката тип, което трябва да кажа, интерфейсите на съветника, прилагани от тях. Укажете име ITest интерфейс. След приключване на съветника, ще бъде създаден следващия модул:

Windows, ActiveX, Уроци, ComObj;

TTEST = клас # 40; TComObject, ITest # 41;

TComObjectFactory. създавам # 40; ComServer, TTEST, Class_Test,

"Тест". ''. ciMultiInstance, tmApartment # 41; ;

Ако създадете COM-сървър, който може да се използва от различни клиенти (а не само за конкретен проект, в който строго определени спецификации на клиентите) не се препоръчва сървъри без събирателен подкрепа на данни, тъй като в този случай не е възможно да бъде сигурен, че тя намери в една и съща "стая "с клиента. Ако направите такъв сървър - необходимо е да се отрази на необходимата спецификация на документацията на клиента върху него.
Нека да разгледаме генерирания код по-подробно. От особен интерес е раздела за инициализацията. Той създава инстанция на "обект фабрика» - COM-сървър, който изпълнява интерфейс IClassFactory2. За него COM ще се стреми да създаде копие на теста обект. VCL автоматично изпълнява всички рутинната работа на взаимодействие с COM.
необходимо да се напише модул интерфейс с описанието на интерфейса за изпълнение на сървъра. В допълнение, тя ще представи на описанието на Class_Test на константи и го добавете към модула линия използва Unit1

процедура ShowIt # 40; S: String # 41; ;

Този модул съдържа цялата необходима информация за сървъра и клиента трябва да се използва при съставянето.
Ние допълни COM обектно-код прилагането на методите на интерфейса:

Windows, ActiveX, Уроци, ComObj, TestInterface;

TTEST = клас # 40; TComObject, ITest # 41;

процедура ShowIt # 40; S: String # 41; ;

MessageBox # 40; 0. PChar # 40; S # 41. NIL. 0 # 41; ;

TComObjectFactory. създавам # 40; ComServer, TTEST, Class_Test,

"Тест". ''. ciMultiInstance, tmApartment # 41; ;

Събиране на проекта, ние ще се подават Project1.dll
Последната стъпка е да се регистрирате на COM-сървъра.
В командния ред: «regsvr32 project1.dll»
Ако всичко е направено правилно, на екрана трябва да се появи съобщение за успешна регистрация: «DllRegisterServer в Project1.dll успя».
Готови сте да пишете на клиента. За да направите това, да създадете нов проект, добави модул с основната си форма използва TestInterface линия и напишете следния код:

използва TestInterface, ComObj;

процедура TForm1. Button1Click # 40; Подател: TObject # 41; ;

Тест: = CreateComObject # 40; Class_Test # 41; като ITest;

Тест. ShowIt # 40; "Здрасти" # 41; ;

Както се вижда от този пример, за да създавате и използвате COM-сървър не е по-трудно, отколкото да работи с конвенционални класове Delphi. без тип библиотека сървър е добър избор за изпълнението на COM-сървърите, използвани в рамките на проекта, тъй като е необходимо да се използва интерфейс модул. Когато прехвърлянето на сървъра на други разработчици, което трябва да им се даде този модул и ако е необходимо, превежда го на друг език (като C).
Сървър с тип библиотека
Библиотека вида - е специална двоичен ресурс, който описва интерфейси и методи, прилагани от COM-сървъра. Освен като сървър тип библиотека трябва да поддържа IProvideClassInfo интерфейс. В Делфи като сървъра се осъществява от него, произтичащи от TTypedComObject. За да направите това, оставете квадратчето Включи Wizard Тип библиотека в COM-съвместим обект.
Създаване на COM-сървър под формата на EXE (разбира се, тя може да бъде създаден и DLL).
Първо, създаване на нов проект (File-New Application) и след това добавете COM-обект.
Ако не премахнете отметката от квадратчето Включи тип библиотека, съветникът ще има не един, а два модула. Първият от тях напомня сте създали по-рано.

Windows, ActiveX, Уроци, ComObj, Project1_TLB, StdVcl;

TTest1 = клас # 40; TTypedComObject, ITest1 # 41;

TTypedComObjectFactory. създавам # 40; ComServer, TTest1, Class_Test1,

ciMultiInstance, tmApartment # 41; ;

ITest1 = интерфейс # 40; IUnknown # 41;

функция ShowIt # 40; Конст S: WideString # 41. HRESULT; stdcall;

И в Unit1 модул:

TTest1 = клас # 40; TTypedComObject, ITest1 # 41;

функция ShowIt # 40; Конст S: WideString # 41. HRESULT; stdcall;

функционира TTest1. ShowIt # 40; Конст S: WideString # 41. HRESULT;

Можем само да се напише изпълнение метод:

функционира TTest1. ShowIt # 40; Конст S: WideString # 41. HRESULT;

MessageBoxW # 40; 0. PWideChar # 40; S # 41. NIL. 0 # 41;

Резултат: = S_OK; // Стандарт код успех

За да се регистрирате сървъра веднъж е достатъчно, за да го стартирате на клиентския компютър.

Подкрепете проекта - споделете линка, благодаря!