Delphi COM технологиялары


Delphi COM технологиялары [31 бет]

КІРІСПЕ

1 НЕГІЗГІ БӨЛІМ

1. 1 COM - технологиясының негіздері.

1. 2 Интерфейс

1. 3 Интерфейстерді жариялау

1. 4 Интерфейстер және VCL Tcomponent класы

1. 5 COM - сервер, құрамы және қолдануы

1. 6 Ағымдар мен бөлмелер

2 ПРАКТИКАЛЫҚ БӨЛІМ

2. 1 COM - серверін ұйымдастыру

2. 2 COM - серверін тіркеу

2. 3 Интерфейстердің және параметрлердің берілуі

ҚОРЫТЫНДЫ

ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР

ҚОСЫМША

КІРІСПЕ

COM (Component Object Model - көп компонентті объектілер моделі) - Windows технологияларының ішіндегі негізгілердің бірі. COM - бұл компоненттердің объектілі моделі. COM - технологиясы API - ді суреттеу кезінде және әртүрлі программалау ортасы мен әртүрлі тілдер объектілерін үйлестіру үшін қолданылатын екілік стандартты суреттеу үшін қолданылады. СОМ компоненттер мен приложениялар арасындағы қарым - қатынас моделін ұсынады. СОМ - технологиясы СОМ - объектілермен жұмыс жасайды. Объект СОМ серверінің бөлігі болып табылады. СОМ - объекттер Delphi визуалды кітапханасының объектілеріне ұқсас. VCL Delphi объектілеріне қарағанда СОМ-объектілерінің құрамында әдістер, қасиеттер және интерфейстер болады. Жай ғана СОМ-объектінің құрамында бір немесе бірнеше интерфейс болады. Егер интерфейстер бірнеше болса, онда олардың ішінде ұқсас функцияларды орындайтын көптеген әдістер болады. Интерфейсті жариялаудың құрамына оның әдістерін және қасиеттерін суреттеу кіреді бірақ оны жүзеге асыру кірмейді. Сонымен қатар интерфейсті жариялаған кезде оналты байттық сан көрсетілуі мүмкін, ол интерфейстің идентификаторы. Әр интерфейстің өзіндік көрсеткіші болады.

СОМ - технологиясының екі ерекшелігі бар:

- СОМ - объектілерді құру программалау тіліне тәуелді емес. Осындай жолмен СОМ-объектілері кез - келген тілде жазылуы мүмкін.

- СОМ-объектілері Windows - қа арналған кез - келген программалау ортасында қолданылуы мүмкін. Осы орталардың құрамына келесілер кіреді: Delphi, Visual C++, C++Builder, Visual Basic және тағы басқалар. Microsoft фирмасы Windows операциялық жүйесін құрастырған кезде алдына қойған ең басты мақсаттарының бірі, Windows - та жұмыс істейтін әртүрлі программалардың бір - бірімен үйлесімділікте болуы. Бұл оңай емес мәселені шешудің алғашқылары алмастырулар буфері, бөлетін файлдар және мәліметтерді динамикалық алмастырулар технологиясы (Dynamic Data Exchange, DDE) болды. Осыдан кейін объектілерді енгізу және біріктіру технологиясы (Object Linking and Embedding, OLE) құрылды. Алғашқы нұсқасы OLE 1, құрамды құжаттарды құру үшін арналған. Бұл нұсқа жетілдірілмеген болып танылды. Оның орнына OLE 2 нұсқасы шығарылды. Жаңа нұсқасы әртүрлі программалардың бір - біріне өздерінің функцияларын ұсыну туралы сұрақтарды шешуге мүмкіндік берді. Бұл технология 1996 жылға дейін қолданылған. Одан кейін оның орнына ActiveX технологиясы келді. Оның құрамына автоматтандыру (OLE-автоматтандыру), контейнерлер, басқарушы элементтер, Web-технологиялар және т. б. кіреді.

1 НЕГІЗГІ БӨЛІМ

1. 1 COM - технологиясының негіздері.

COM технологиясы бір программаға (клиент) басқа программаның (сервер) объектісімен жұмыс істеуге мүмкіндік береді. СОМ бұл әртүрлі компаниялармен әртүрлі тілде жазылған компоненттердің өзара түсіністікте және алмасуда болуын қарастыратын объект жобасы. Программалардың қай жақта орындалып жатқаны маңызды рол атқарады:бір потокта, әртүрлі потоктарда, әртүрлі компьютерлерде. Қазіргі кезде шығып жатқан Windows - тың соңғы технологиялары (Shell, Scripting, HTML қолдау және т. б. ) өздерінің қабықшалы программалық интерфейстерін (Application Program Inyerface, API) COM интерфейсі арқылы жүзеге асырады. Сондықтан, қазіргі заманда профессионалды программалау COM моделін түсінуді және онымен жұмыс істеуді талап етеді. Delphi - дің басты ерекшеліктерінің бірі СОМ - технологиясын қолдауы болып табылады.

СОМ - ның көзқарасы бойынша приложенияның құрамында бірнеше объект болады(кейбір жағдайда бір ғана объект болуы мүмкін) . Әр объекттің бір немесе бірнеше интерфейсі болуы мүмкін. Интерфейсте сыртқы программалар рұқсат алатын объекттің әдістері сипатталған. Егер интерфейстер бірнеше болса, онда олардың ішінде ұқсас функцияларды орындайтын көптеген әдістер болады. Объект СОМ серверінің бөлігі болып табылады. COM технологиясының негізгі мақсаты - объекттердің экспорттану мүмкіндіктерін қамтамасыз ету болып табылады. Объекттердің экспорттану ойы келесіде:бір модуль объект құрады, ал екінші модуль әдістер мен сервистерге сұраныс жасау арқылы ол объектті қолданады. Сервер орындаушы файл немесе DLL библиотекасы болуы мүмкін. Windows - та сервер орнатылғанда жүйелік реестерге оның барлық объектілері туралы мәліметтер енгізіледі. Бұл мәліметтердің құрамына объекттің класын анықтайтын CLSID (Class Identifier) класының идентификаторы кіреді. Сервердің типі жайлы мәліметтер енгізіледі: клиентке қосылатын (in-process) - DLL ішкі, клиенттің компьютерінде бөлек процесс болып жұмыс істейтін - локальды (local), өшірілген компьютерде жұмыс істейтін - (remote) өшірілген. Ішкі және локальды серверлер үшін реестерге файлдың толық аты енгізіледі, ал өшірілген үшін толық желілік мекен жай енгізіледі. Осындай жолмен кез-келген кезде шақыруға болатын СОМ сервері жайлы ақпараттар жүйеде сақталып тұрады. Енді жай ғана мысал келтірейік: Бізде класс бар - примитивті калькулятор:

MyCalc=class

fx, fy:integer;

public:

procedure SetOperands(x, y:integer)

function Sum:integer;

function Diff:integer;

end;

procedure MyCalc. SetOperands(x, y:integer)

begin

fx:=x; fy:=y;

end;

function MyCalc. Sum:integer;

begin

result:=fx+fy;

end;

function MyCalc. Diff:integer;

begin

result:=fx-fy;

end;

Енді бізде осы кластың элементі болса, онда оны қолдану түкке тұрмайды. Енді келесі жағдайды келтірейік:осы кластың объектісі аталынатын бір модуль бар. Мысалы:

unit MyCalc

type

MyCalc=class

<суреттелуі жоғарыда>

var

Calc:MyCalc;

Енді біз оны қайтадан компиляция жасамай - ақ басқа модульде қолданғымыз келеді. Ең оңай нұсқасы келесідей болады:

unit MyCalc

type

MyCalc=class

<сипатталуы жоғарыда>

var Calc:MyCalc;

procedure SetOperands(x, y:integer)

begin

Calc. SetOperands(x, y) ;

end;

function Sum:integer;

begin

result:= Calc. Sum;

end;

function Diff:integer;

begin

result:= Calс. Diff;

end;

procedure CreateObject;

begin

Calc:=MyCalc. Create;

end;

procedure ReleaseObject;

begin

Calc. Free;

end;

1. 2 Интерфейс

Енді интерфейсті толығырақ қарастырайық. Интерфейс программист пен компилятор арасындағы келісім шарт болып табылады. Программист интерфейсте суреттелген бүкіл әдістерді жүзеге асыруға міндетті. Компилятор жасалынып жатқан интерфейстің әдістеріне сұраныс жасауға мүмкіндік беретін программаның ішіндегі ішкі структураларды іске асыруға міндетті. Осындай жолмен COM технологиясы тілдік - тәуелсіз болып табылады және былайша айтқанда оны программаларды біріктіретін клей түрінде қолдануға болады. СОМ объектісіне сұраныс жасап тұрған сыртқы приложениялар СОМ клиенттері болып табылады. Клиент сұраныс жасап тұрған объектінің интерфейсіне сілтеме алады. Осы сілтеме арқылы объектінің әдістерін шақыра алады. СОМ спецификасы бұрын аталған интерфейсті өзгертуге тыйым салады. Бұл серверде әртүрлі модификациялар пайда болған кезде клиенттің жұмысының дұрыстығын қамтамасыз етеді.

Осындай жолмен клиентке объектінің интерфейсін және ол ұсынып тұрған әдістерді білгені ақ жеткілікті. Ал басқа жақтарын жүйе қамтамасыз етеді. Егер сервер қосылмаған болса, онда жүйе оны керек кезде қосады. Сервер объект құрады, объект бүкіл мәліметтерді жүкейді және клиент жұмыс істей алу клиентке объектіге және оның интерфейсіне сілтеме береді. Жүйе объектінің бірден бірнеше клиенттермен жұмыс істеуін қамтамасыз етеді. Ол үшін жүйе объектіге жасалған сілтемелер санының есебін жүргізеді. Клиентке белгілі бір интерфейске көрсеткіш жіберілгенде сілтемелер саны бірге көбейеді. Ал клиенттің объектімен жұмысы аяқталған кезде сілтемелер саны бірге азаяды. Егер сілтемелер саны нөлге тең болса, онда жүйе сол кездегі бірде бір клиент жұмыс істемей тұрған объектіні жояды. Барлығы жақсы, бірақ клиенттік приложенияны өндіруші СОМ объектілері, интерфнйстері, әдістері, қасиеттері туралы мәліметтерді қайдан алады?Бүкіл керекті мәліметтер типтер кітапханасында орналасқан. Оны СОМ объектісінің өндірушісі құрастырады және объектімен бірге таралады. Кітапхана интерфейсті суреттеу тілі IDL (Interface Definition Language) арқылы құрастырылады.

Интерфейсті жариялаудың құрамына оның әдістерін және қасиеттерін суреттеу кіреді бірақ оны жүзеге асыру кірмейді. Сонымен қатар интерфейсті жариялаған кезде оналты байттық сан көрсетілуі мүмкін, ол интерфейстің идентификаторы. Кез келген идентификатордың құрамында «I» символынан басталатын аты және GUID (Globally Unique Identifier) глобальды идентификатор болады. GUID тек қана идентификаторлар үшін ғана жасалып қолданылмайды. Интерфейстер үшін GUID IID деп аталады. Кез келген СОМ объектісінде Іunknown интерфейсі болады. Бұл интерфейстің тек қана үш әдісі бар: Query Interface - интерфейске көрсеткіш алу, AddRef и Release - объектіге сілтемелер санының бірге көбеюі және кішіреюі. Delphi да интерфейс әдістерінің сәйкес аттары кішкене өзгеше: Querylnterface, AddRef, Release.

Интерфейстер мұрагерлене алады. Интерфейстің мұрагерленуі бұл - мұрагерлік интерфейстің құрамына алдыңғы интерфейстердің бүкіл әдістерінің кіруін көрсететін декларация. Бірақ келесілерді түсіну керек:

Интерфейс - бұл класс емес. Класс интерфейстің іске асырылуы болып табылады. Бірақ кластың құрамында белгілі бір программалау тіліндегі әдістердің кодтары болады, ал интерфейте болмайды.

Интерфейс - қатаң түрде типтелген. Клиентте интерфейстің жүзеге асырылуы да интерфейсте суреттелген әдістер мен қасиеттерді қолдануы керек.

1. 3 Интерфейстерді жариялау

Интерфейстерді қолдау үшін Delphi Pascal тілінің синтаксисін қосымша кілттік сөздермен кеңейтеді. Delphi - де интерфейсті жариялау interface кілттік сөзі арқылы жүзеге асады. Мысалы:

type

IMyInterface = interface

['{412AFF00-5C21-11D4-84DD-C8393F763A13}']

procedure DoSomething(var I: Integer) ; stdcall;

function DoSomethingAnother(S: String) : Boolean;

end;

IMyInterface2 = interface(IMyInterface)

['{412AFF01-5C21-11D4-84DD-C8393F763A13}']

procedure DoAdditional(var I: Integer) ; stdcall;

end;

Delphi - да GUID жаңа мағынасының генерациясын IDE - ге ауыстыру үшін Ctrl+Shift+G батырмаларының бірігуін басу керек.

COM моделінің негізгі интерфейсі Iunknown болып табылады. Кез - келген интерфейс Iunknown интерфейсінен мұрагерленеді және бұрын жарияланған әдістерді міндетті түрде іске асыру керек. Iunknown интерфейсі System. pas модулінде келесі түрде жарияланады:

type

IUnknown = interface

['{---C000-46}']

function QueryInterface(const IID: TGUID; out Obj) : HResult; stdcall;

function _AddRef: Integer; stdcall;

function _Release: Integer; stdcall;

end;

Iunknown әдісінің не үшін арналғанын қарастырайық. Соңғы екі әдіс сілтемелерді санау механизмін жүзеге асыру үшін қажет.

function _AddRef: Integer; stdcall;

Бұл функция интерфейске жасалған сілтемелердің санын бірге көбейтеді және есептегіштің жаңа мағынасын қайтарады.

function _Release: Integer; stdcall;

Бұл функция интерфейске жасалынған сілтемелердің санын бірге азайтады. Жоғарыда айтылғандай егер сілтемелер саны нөлге тең болса, онда жүйе сол кездегі бірде бір клиент жұмыс істемей тұрған объектіні жояды.

Бірінші әдіс интерфейсті іске асырып жатқан класқа сілтеме алуға мүмкіндік береді.

function QueryInterface(const IID: TGUID; out Obj) : HResult; stdcall;

Бұл функция кіру қасиеті ретінде интерфейстің идентификаторын алады. Егер объект сұраныс жасалған интерфейсті іске асыратын болса, онда функция:

1. Оған жасалған сілтемені Obj параметріне қайтарады.

2. Қабылданған интерфейстің _AddRef әдісін шақырады.

3. Нолді қайтарады.

Болмаған жағдайда функция қателік кодын E_NOINTERFACE қайтарады.

System. pas модулінде Iunknown - ды және оның әдістерін жүзеге асыратын TinterfacedObject класы жарияланған. Өз интерфейсіңді құру үшін осы класты қолдану тиімді болады. Одан басқа Tobject класында интерфейстерді жүзеге асырудың қолдауы бар. Оның келесі әдісі бар:

function TObject. GetInterface(const IID: TGUID; out Obj) : Boolean;

Егер объект сұраныс жасалған интерфейсті іске асыратын болса, онда функция:

1. Оған жасалған сілтемені Obj параметріне қайтарады.

2. Қабылданған интерфейстің _AddRef әдісін шақырады.

3. TRUE - ні қайтарады

Болмаған жағдайда функция FALSE - ты қайтарады. Осындай жолмен Delphi - дің кез келген класынан оның жүзеге асыратын интерфейсіне сұраныс жасауға болады. Delphi - де интерфейсті іске асыру үшін міндңтті түрде класс қолданылады. Ол үшін класты жариялау кезінде оның қандай интерфейстерді жүзеге асыратынын көрсету керек.

type

TMyClass = class(TComponent, IMyInterface, IDropTarget)

// Әдістерді іске асыру

end;

TmyClass класы IMyInterface және IdropTarget интерфейстерін жүзеге асырады. Бұл жерде кластың бірнеше интерфейстерді жүзеге асыруы мұрагерлік жолмен берілмегендігін түсіну өте маңызды. Кластарды суреттеу кезінде көрсетілетін интерфейстер тек сол класс арқылы жүзеге асырылатын интерфейстер бар екендігін көрсетеді. Интерфейсте жарияланған бүкіл әдістердің аттары мен тізімдері, қасиеттері класта қолданылатын әдістерге сәйкес келуі керек. Мысал келтірейік:

type

ITest = interface

['{61F26D40-5CE9-11D4-84DD-F1B8E3A70313}']

procedure Beep;

end;

TTest = class(TInterfacedObject, ITest)

procedure Beep;

destructor Destroy; override;

end;

procedure TTest. Beep;

begin

Windows. Beep(0, 0) ;

end;

destructor TTest. Destroy;

begin

inherited;

MessageBox(0, 'TTest. Destroy', NIL, 0) ;

end;

Бұл жерде Ttest класы Itest интерфейсін жүзеге асырады. Программадан интерфейсті қолдануды қарастырайық.

procedure TForm1. Button1Click(Sender: TObject) ;

var

Test: ITest;

begin

Test := TTest. Create;

Test. Beep;

end;

Егер біз интерфейстің жүзеге асырылуын бірден жойғымыз келсе, онда ауыспалының көзге көрінбейтін аймаққа шықпай тұрған кезде оған NIL мағынасын меншіктеу керек.

Code:

var

Test: ITest;

T: TTest;

begin

T := TTest. Create;

Test := T;

Test. Beep;

Test := NIL; // IUnknown. _Release автоматты түрде шақырылады;

end;

Iunknown әдісінің автоматты түрде шақырылуына көңіл бөлу керек. Сондықтан Iunknown әдісін өзіміз шақырмау керекпіз. Бұл автоматты түрде сілтемелерді санаудың дұрыс жұмыс істеуіне кедергі келтіреді. Оны болдырмау үшін келесілерді есте сақтау керек:

- интерфейске объекттің типін келтірген кезде _AddRef әдісі шақырылады.

- интерфейске сұраныс жасап тұрған ауыспалыға басқа мағына меншіктеген кезде _Release әдісі шақырылады.

Бір рет объекттен интерфейске сұраныс жасағаннан кейін, болашақта объектті өз қолымызбен босатпау керекпіз. Осы уаққытан бастап объектпен тек қана интерфейстік сілтемелер арқылы жұмыс істеу керек. Қарастырылған мысалдарда интерфейсті алу үшін кластардағы қолданылған кодтар компиляция кезеңінде өзгеріп отырды. Егер класс сұраныс жасап тұрған интерфейсті жүзеге асырмаса онда программа компиляциядан өтпейді. Бірақ программаны орындау кезінде интерфейске сұраныс жасауға мүмкіндік бар. Ол үшін as операторы қолданылады. Ол QueryInterface - ті шақырады және сәттілік болған жағдайда қабылданған интерфейске сілтемені қайтарады. Мысалы келесі код компиляциядан өтеді, бірақ орындау кезінде келесі қатені шығарады « Interface not supported»:

var

Test: ITest;

begin

Test := TInterfacedObject. Create as ITest;

Test. Beep;

end;

Сол уақытта да код:

var

Test: ITest;

begin

Test := TTest. Create as ITest;

Test. Beep;

end;

Компиляциядан өтеді және орындалады.

Енді интерфейстерді жүзеге асыруды толығырақ қарастырайық.

Екі интерфейсті жариялайық:

type

ITest = interface

['{61F26D40-5CE9-11D4-84DD-F1B8E3A70313}']

procedure Beep;

end;

ITest2 = interface

['{61F26D42-5CE9-11D4-84DD-F1B8E3A70313}']

procedure Beep;

end;

Енді осы екі интерфейсті де жүзеге асыратын класты құрайық:

TTest2 = class(TInterfacedObject, ITest, ITest2)

procedure Beep1;

procedure Beep2;

procedure ITest. Beep = Beep1;

procedure ITest2. Beep = Beep2;

end;

Көрініп тұрғандай кластың құрамында бірден екі Beep әдіс болуы мүмкін емес. Сондықтан Delphi осындай аттарға байланысты конфликттарды шешуге амалдарды ұсынады. Ол кластың қай әдісі интерфейсті жүзеге асырудың әдісімен сәйкес келетіндігін анықтайды және көрсетеді. Егер TTest2. Beep1 и TTest2. Beep2 әдістері ұқсас болса, онда екі әртүрлі әдістерді құрастырмай ақ, класты келесі түрде жариялау керек:

TTest2 = class(TInterfacedObject, ITest, ITest2)

procedure MyBeep;

procedure ITest. Beep = MyBeep;

procedure ITest2. Beep = MyBeep;

end;

Екі интерфейсті жүзеге асыратын кластың мысалын қарастырайық:

type

TBeeper = class

procedure Beep;

end;

TMessager = class

procedure ShowMessage(const S: String) ;

end;

TTest3 = class(TInterfacedObject, ITest, IAnotherTest)

private

FBeeper: TBeeper;

FMessager: TMessager;

property Beeper: TBeeper read FBeeper implements ITest;

property Messager: TMessager read FMessager implements IAnotherTest;

public

constructor Create;

destructor Destroy; override;

end;

Интерфейстің жүзеге асырылуын басқа класқа жүктеу үшін implements кілттік сөзі қолданылады:

{ TBeeper }

procedure TBeeper. Beep;

begin

Windows. Beep(0, 0) ;

end;

{ TMessager }

procedure TMessager. ShowMessage(const S: String) ;

begin

MessageBox(0, PChar(S), NIL, 0) ;

end;

{ TTest3 }

constructor TTest3. Create;

begin

inherited;

FBeeper := TBeeper. Create;

FMessager := TMessager. Create;

end;

destructor TTest3. Destroy;

begin

Кластарды босату

FBeeper. Free;

FMessager. Free;

inherited;

end;

1. 4 Интерфейстер және VCL Tcomponent класы

VCL Tcomponent базалық класында Iunknown интерфейсін жүзеге асыруға мүмкіндік беретін көптеген әдістер жиынтығы бар. Бірақ кластың өзі бұл интерфейсті жүзеге асырады. Бұл Tcomponent мұрагерлеріне Iunknown интерфейсін жүзеге асыруды алаңдамай басқа интерфейстерді жүзеге асыруға мүмкіндік береді. Бірақ Tcomponent _AddRef және TComponent. _Release әдістері программаны орындау кезеңдерінде сілтемелерді санау механизмін жүзеге асырмайды. Сол себепті интерфейсті жүзеге асырушы Tcomponent мұрагерлері үшін жадыны басқарудың автоматты түрі жұмыс істемейді. Бұл жағдай жадыда уақытша орналасқан объектілерге қорқпай сұраныс жасалына береді, себебі олар жадыдан өшіріліп кетпейді. Сонымен келесі код дұрыс және қауіпсіз болып тпбылады:

type

IGetData = interface

['{B5266AE0-5E77-11D4-84DD-9153115ABFC3}']

function GetData: String;

end;

TForm1 = class(TForm, IGetData)

private

function GetData: String;

end;

var

I: Integer;

GD: IGetData;

S: String;

begin

S := '';

for I := 0 to Pred(Screen. FormCount) do begin

if Screen. Forms[I] . GetInterface(IGetData, GD) then

S := S + GD. GetData + #13;

end;

ShowMessage(S) ;

end;

Бұл код приложенияларындағы бүкіл формалардың ішінде IgetData интерфейсін жүзеге асыру барының немесе жоқтығын тексереді. Егер форма бұл интерфейсті жүзеге асыратын болса, онда оның әдісін шақырады.

Жоғарыда қаралған Tcomponent приложениядағы компоненттерді қатаң типтілікті жоғалтпай біріктіруді және оңай соғуға мүмкіндік береді. Компонентті жүзеге асыру ғана жеткілікті, ал шақырылған программада оның бар немесе жоқтығын тексеру керек.

Мысалы біркелкі құралдар панелі және көптеген әртүрлі формалары бар MDI приложенияны қарастырайық. Бұл құралдар панелінде «Сақтау», «Жүктеу» және «Тазалау» командалары бар, бірақ терезелердің әрқайсысы бұл командаларға әртүрлі жауап береді. Интерфейстерді жариялау модулін жасайық:

unit ToolbarInterface;

interface

type

TCommandType = (ctSave, ctLoad, ctClear) ;

TCommandTypes = set of TCommandType;

TSaveType = (stSave, stSaveAS) ;

IToolBarCommands = interface

['{B5266AE1-5E77-11D4-84DD-9153115ABFC3}']

function SupportedCommands: TCommandTypes;

function Save(AType: TSaveType) : Boolean;

procedure Load;

procedure Clear;

end;

implementation

end.

1- суретте. Программаның жұмысы

1. 5 COM - сервер, құрамы және қолдануы

COM моделі программалау тілдерінен тәуелсіз көп рет қолдануға болатын компоненттерді құруға мүмкіндік береді. Бұл компоненттерді COM серверлер деп атайды. Олар орындаушы (EXE) файлдарынан және динамикалық (DLL) кітапханаларынан тұрады. Егер олар COM - ды қолдайтын программалу тілінде жазылған болса, онда оларды еш қиындықсыз кез - келген программадан шақыруға болады. COM сервер (In-Proc сервер) шақырушы программаның адрестік аймағында, (Out-Of-Proc сервер) өзіндік процесі ретінде немесе басқа (Distributed COM) компьютерде орындала алады. COM берілгендерді жіберуге(Marshalling) байланысты және клиент пен сервердің арасындағы потоктік үйлесімділікке байланысты сұрақтарды автоматты түрде шешеді. COMмен жұмыс істеу үшін керекті архитектуралық мәліметтер:

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Delphi Windows жүйесінде программалаудың ыңғайлы құралы
Delphi ортасы туралы
Delphi (дерек қормен жұмыс)
Delphi-де Microsoft Acces арқылы кесте құру
Программалауды оқытудың замануи технологиялары
Банктік ААЖ
SpeedButton компоненті
Delphi бағдарламасын қолданып, графикалық мүмкіндіктерін көрсететін бағдарлама құру
Сайтқа қойылатын талаптар
Delphi-де қазақша - ағылшынша сөздік жасау
Пәндер



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz