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

КІРІСПЕ

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-технологиялар және т.б. кіреді.
        
        Delphi COM технологиялары [31 бет]
КІРІСПЕ
1 НЕГІЗГІ БӨЛІМ
1.1 COM – технологиясының негіздері.
1.2 Интерфейс
1.3 Интерфейстерді жариялау
1.4 Интерфейстер және VCL ... ... COM – ... ... және ... ... мен ... ПРАКТИКАЛЫҚ БӨЛІМ
2.1 COM – серверін ұйымдастыру
2.2 COM - серверін тіркеу
2.3 Интерфейстердің және параметрлердің берілуі
ҚОРЫТЫНДЫ
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР
ҚОСЫМША
КІРІСПЕ
COM (Component Object Model – көп ... ... ... -
Windows технологияларының ішіндегі ... ...... ... ...... API – ді ... және әртүрлі программалау ортасы мен әртүрлі тілдер объектілерін
үйлестіру үшін ... ... ... ... үшін қолданылады.СОМ
компоненттер мен приложениялар арасындағы ...... ...... СОМ – ... жұмыс жасайды.Объект СОМ
серверінің бөлігі ... ...... Delphi ... ... ... Delphi объектілеріне қарағанда СОМ-
объектілерінің құрамында әдістер,қасиеттер және интерфейстер болады.Жай
ғана СОМ-объектінің ... бір ... ... интерфейс болады.Егер
интерфейстер бірнеше болса, онда олардың ішінде ұқсас ... ... ... ... ... жариялаудың құрамына оның
әдістерін және қасиеттерін суреттеу ... ... оны ... ... ... ... ... кезде оналты байттық сан
көрсетілуі мүмкін, ол интерфейстің ... ... ... ...... екі ерекшелігі бар:
- СОМ – объектілерді құру программалау тіліне ... ... ... кез – ... ... жазылуы мүмкін.
- СОМ-объектілері Windows – қа арналған кез – ... ... ... ... ... ... келесілер кіреді:
Delphi, Visual C++, C++Builder, Visual Basic және тағы ... Windows ... ... ... кезде алдына қойған ең
басты ... ... – та ... ... әртүрлі
программалардың бір – бірімен үйлесімділікте болуы.Бұл оңай емес мәселені
шешудің алғашқылары алмастырулар буфері,бөлетін файлдар және ... ... ... (Dynamic Data ... DDE)
болды.Осыдан кейін объектілерді енгізу және біріктіру технологиясы (Object
Linking and ... OLE) ... ... OLE 1,құрамды
құжаттарды құру үшін арналған.Бұл нұсқа жетілдірілмеген болып танылды.Оның
орнына OLE 2 нұсқасы шығарылды.Жаңа нұсқасы ... ... бір ... ... ... ... ... сұрақтарды шешуге мүмкіндік
берді.Бұл технология 1996 жылға дейін қолданылған.Одан кейін оның орнына
ActiveX ... ... ... ... ... ... ... кіреді.
1 НЕГІЗГІ БӨЛІМ
1.1 COM – технологиясының негіздері.
COM технологиясы бір программаға (клиент) басқа программаның (сервер)
объектісімен ... ... ... ... бұл ... компаниялармен
әртүрлі тілде жазылған компоненттердің өзара түсіністікте және алмасуда
болуын қарастыратын ... ... қай ... ... ... рол атқарады:бір потокта, әртүрлі потоктарда, ... ... ... ... Windows – тың ... (Shell, Scripting, HTML қолдау және т.б.) ... ... ... ... Program ... ... ... арқылы жүзеге асырады.Сондықтан, қазіргі заманда
профессионалды программалау COM моделін ... және ... ... ... ... Delphi – дің басты ерекшеліктерінің бірі СОМ – технологиясын
қолдауы болып ... – ның ... ... ... құрамында бірнеше объект
болады(кейбір жағдайда бір ғана объект ... ... ... ... ... ... ... мүмкін.Интерфейсте сыртқы программалар
рұқсат алатын ... ... ... ... ... онда ... ... ұқсас функцияларды орындайтын көптеген әдістер
болады. Объект СОМ серверінің бөлігі ... ... ... мақсаты – объекттердің экспорттану мүмкіндіктерін қамтамасыз ету
болып табылады.Объекттердің экспорттану ойы келесіде:бір ... ... ал ... модуль әдістер мен сервистерге сұраныс жасау арқылы ол
объектті қолданады. Сервер орындаушы файл ... DLL ... ... Windows – та сервер орнатылғанда жүйелік реестерге оның ... ... ... енгізіледі.Бұл мәліметтердің құрамына
объекттің класын анықтайтын CLSID (Class ... ... ... типі ... ... енгізіледі: клиентке
қосылатын (in-process) — DLL ішкі, клиенттің компьютерінде бөлек ... ... ...... (local), ... ... ... — (remote) өшірілген.Ішкі және локальды серверлер үшін реестерге
файлдың толық аты енгізіледі, ал өшірілген үшін толық ... ... ... ... ... кезде шақыруға болатын СОМ сервері
жайлы ақпараттар жүйеде сақталып тұрады.Енді жай ғана ... ... ... бар – ... ... ... 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 ... ... ... интерфейсті толығырақ қарастырайық.Интерфейс программист ... ... ... шарт ... ... интерфейсте
суреттелген бүкіл әдістерді жүзеге асыруға міндетті.Компилятор жасалынып
жатқан интерфейстің ... ... ... ... ... ішіндегі ішкі структураларды іске ... ... COM ... тілдік – тәуелсіз болып табылады және былайша
айтқанда оны программаларды біріктіретін клей ... ... ... ... ... жасап тұрған сыртқы приложениялар СОМ клиенттері болып
табылады.Клиент ... ... ... объектінің интерфейсіне сілтеме
алады.Осы сілтеме арқылы объектінің әдістерін шақыра алады. СОМ спецификасы
бұрын ... ... ... ... ... серверде әртүрлі
модификациялар пайда болған кезде клиенттің жұмысының дұрыстығын қамтамасыз
етеді.
Осындай жолмен клиентке объектінің интерфейсін және ол ... ... ... ақ ... ... ... жүйе қамтамасыз
етеді.Егер сервер қосылмаған болса, онда жүйе оны керек кезде қосады.Сервер
объект ... ... ... мәліметтерді жүкейді және клиент жұмыс істей
алу ... ... және оның ... ... береді.Жүйе
объектінің бірден бірнеше клиенттермен жұмыс істеуін қамтамасыз ... жүйе ... ... ... ... есебін жүргізеді.Клиентке
белгілі бір интерфейске көрсеткіш жіберілгенде сілтемелер саны ... ... ... ... аяқталған кезде сілтемелер саны
бірге азаяды.Егер ... саны ... тең ... онда жүйе сол ... бір ... ... істемей тұрған объектіні жояды.Барлығы жақсы, бірақ
клиенттік приложенияны өндіруші СОМ объектілері, интерфнйстері, ... ... ... қайдан алады?Бүкіл керекті мәліметтер типтер
кітапханасында орналасқан.Оны СОМ объектісінің өндірушісі құрастырады және
объектімен бірге таралады.Кітапхана ... ... тілі ... ... ... арқылы құрастырылады.
Интерфейсті жариялаудың құрамына оның әдістерін және қасиеттерін
суреттеу кіреді бірақ оны жүзеге ... ... ... ... ... ... байттық сан көрсетілуі мүмкін, ол ... Кез ... ... ... «I» символынан
басталатын аты және GUID ... Unique ... ... ... тек қана ... үшін ғана ... үшін GUID IID деп ... келген СОМ
объектісінде Іunknown интерфейсі болады.Бұл интерфейстің тек қана үш әдісі
бар: Query Interface — ... ... алу, AddRef и Release ... сілтемелер санының бірге көбеюі және ... Delphi ... ... сәйкес аттары кішкене өзгеше: Querylnterface, AddRef,
Release.
Интерфейстер мұрагерлене алады.Интерфейстің мұрагерленуі бұл ... ... ... ... интерфейстердің бүкіл әдістерінің
кіруін көрсететін декларация.Бірақ келесілерді түсіну керек:
Интерфейс - бұл ... ... ... іске ... ... кластың құрамында белгілі бір ... ... ... ... ал ... ... - ... түрде типтелген.Клиентте интерфейстің жүзеге
асырылуы да интерфейсте суреттелген әдістер мен қасиеттерді қолдануы керек.
1.3 ... ... ... үшін Delphi Pascal ... синтаксисін қосымша
кілттік сөздермен кеңейтеді.Delphi – де ... ... ... сөзі арқылы жүзеге асады.Мысалы:
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 – ге ... ... ... ... басу ... моделінің негізгі интерфейсі Iunknown болып табылады.Кез – ... Iunknown ... ... және ... ... ... түрде іске асыру керек. Iunknown интерфейсі System.pas
модулінде келесі түрде жарияланады:
type
IUnknown = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): HResult; ... _AddRef: Integer; ... ... Integer; ... ... не үшін арналғанын қарастырайық.Соңғы екі әдіс
сілтемелерді санау механизмін жүзеге асыру үшін ... _AddRef: Integer; ... ... ... ... ... санын бірге көбейтеді
және есептегіштің жаңа мағынасын қайтарады.
function _Release: Integer; ... ... ... ... ... санын бірге
азайтады.Жоғарыда айтылғандай егер ... саны ... тең ... ... сол ... бірде бір клиент жұмыс істемей тұрған объектіні жояды.
Бірінші әдіс ... іске ... ... класқа сілтеме алуға
мүмкіндік береді.
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
Бұл функция кіру ... ... ... ... ... ... ... интерфейсті іске асыратын болса, онда
функция:
1. Оған жасалған сілтемені Obj параметріне ... ... ... _AddRef ... ... ... ... жағдайда функция қателік кодын E_NOINTERFACE қайтарады.
System.pas модулінде Iunknown – ды және оның ... ... ... ... ... ... құру үшін осы класты
қолдану ... ... ... Tobject ... интерфейстерді жүзеге
асырудың қолдауы бар.Оның келесі әдісі бар:
function TObject.GetInterface(const IID: TGUID; out Obj): Boolean;
Егер объект сұраныс жасалған ... іске ... ... ... Оған ... ... Obj параметріне қайтарады.
2. Қабылданған интерфейстің _AddRef әдісін шақырады.
3. TRUE - ні ... ... ... FALSE – ты қайтарады.Осындай жолмен Delphi –
дің кез келген класынан оның жүзеге асыратын интерфейсіне сұраныс ... Delphi – де ... іске ... үшін ... ... ... үшін ... жариялау кезінде оның ... ... ... көрсету керек.
type
TMyClass = class(TComponent, IMyInterface, IDropTarget)
// Әдістерді іске асыру
end;
TmyClass класы IMyInterface және ... ... ... ... кластың бірнеше интерфейстерді жүзеге асыруы мұрагерлік
жолмен ... ... өте ... ... ... ... тек сол класс арқылы жүзеге асырылатын
интерфейстер бар ... ... ... ... ... мен тізімдері, қасиеттері класта қолданылатын әдістерге
сәйкес келуі керек.Мысал келтірейік:
type
ITest = interface
['{61F26D40-5CE9-11D4-84DD-F1B8E3A70313}']
procedure Beep;
end;
 
TTest = class(TInterfacedObject, ITest)
procedure Beep;
destructor Destroy; ... ... ... ... NIL, ... ...  Ttest класы Itest интерфейсін жүзеге асырады.Программадан
интерфейсті ... ... ... ... ... := TTest.Create;
Test.Beep;
end;
Егер біз интерфейстің жүзеге асырылуын бірден жойғымыз келсе, ... ... ... ... ... ... ... оған NIL
мағынасын меншіктеу керек.
Code:
var
Test: ITest;
T: TTest;
begin
T := ... := ... := NIL;  // ... ... ... ... ... автоматты түрде шақырылуына көңіл ... Iunknown ... ... ... ... ... сілтемелерді санаудың дұрыс жұмыс істеуіне кедергі келтіреді.Оны
болдырмау үшін келесілерді есте сақтау керек:
- интерфейске ... ... ... ... _AddRef ... ... ... жасап тұрған ауыспалыға басқа мағына меншіктеген
кезде _Release әдісі шақырылады.
Бір рет объекттен интерфейске сұраныс ... ... ... өз ... ... ... ... бастап объектпен тек
қана интерфейстік сілтемелер арқылы ... ... ... ... алу үшін ... қолданылған кодтар компиляция
кезеңінде өзгеріп отырды.Егер класс ... ... ... ... жүзеге
асырмаса онда программа компиляциядан өтпейді.Бірақ программаны орындау
кезінде интерфейске сұраныс ... ... ... үшін as ... ... – ті ... және ... болған жағдайда
қабылданған интерфейске сілтемені қайтарады.Мысалы келесі код ... ... ... ... келесі қатені шығарады « Interface not
supported»:
var
Test: ITest;
begin
Test := TInterfacedObject.Create as ITest;
Test.Beep;
end;
Сол уақытта да код:
var
Test: ... := ... as ... ... және орындалады.
Енді интерфейстерді жүзеге асыруды толығырақ қарастырайық.
Екі интерфейсті жариялайық:
type
ITest = interface
['{61F26D40-5CE9-11D4-84DD-F1B8E3A70313}']
procedure Beep;
end;
 
ITest2 = ... ... осы екі ... де ... асыратын класты құрайық:
TTest2 = class(TInterfacedObject, ITest, ITest2)
procedure Beep1;
procedure Beep2;
procedure ITest.Beep = Beep1;
procedure ITest2.Beep = ... ... ... құрамында бірден екі Beep әдіс болуы мүмкін
емес.Сондықтан Delphi осындай аттарға байланысты конфликттарды ... ... ... қай ... интерфейсті жүзеге асырудың әдісімен
сәйкес келетіндігін анықтайды және ... ... ... ... ... ... онда екі ... әдістерді құрастырмай
ақ, класты келесі түрде жариялау ... = ... ITest, ... ... ... = ... ... = MyBeep;
end;
Екі интерфейсті жүзеге асыратын кластың мысалын қарастырайық:
type
TBeeper = ... ... = ... ... S: ... = ... ITest, IAnotherTest)
private
FBeeper: TBeeper;
FMessager: TMessager;
property Beeper: TBeeper read FBeeper implements ITest;
property Messager: TMessager read ... ... ... ... Destroy; override;
end;
Интерфейстің жүзеге асырылуын басқа ... ... үшін ... сөзі ... TBeeper ... ... TMessager }
procedure TMessager.ShowMessage(const S: String);
begin
MessageBox(0, PChar(S), NIL, 0);
end;
 
{ TTest3 }
constructor TTest3.Create;
begin
inherited;
FBeeper := ... := ... ... ... ... және VCL ... ... Tcomponent базалық класында Iunknown интерфейсін жүзеге асыруға
мүмкіндік беретін ... ... ... ... кластың өзі бұл
интерфейсті жүзеге асырады.Бұл Tcomponent ... ... ... ... ... ... интерфейстерді жүзеге асыруға
мүмкіндік ... ... _AddRef және ... программаны орындау кезеңдерінде сілтемелерді санау механизмін
жүзеге асырмайды.Сол ... ... ... ... ... үшін ... ... автоматты түрі жұмыс істемейді.Бұл
жағдай жадыда уақытша орналасқан объектілерге қорқпай сұраныс ... ... олар ... ... ... ... код дұрыс және
қауіпсіз болып тпбылады:
type
IGetData = interface
['{B5266AE0-5E77-11D4-84DD-9153115ABFC3}']
   function GetData: ... = ... ... GetData: ... 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 + ... + ... код ... ... ... ... ... жүзеге асыру барының немесе жоқтығын тексереді.Егер форма бұл
интерфейсті ... ... ... онда оның ... ... ... Tcomponent приложениядағы компоненттерді қатаң
типтілікті жоғалтпай біріктіруді және оңай ... ... ... ... ғана ... ал ... ... бар немесе жоқтығын тексеру керек.
Мысалы біркелкі құралдар панелі және көптеген әртүрлі формалары бар
MDI приложенияны ... ... ... ... «Жүктеу»
және «Тазалау» командалары бар, ... ... ... бұл
командаларға әртүрлі жауап береді.Интерфейстерді жариялау модулін жасайық:
unit ToolbarInterface;
interface
type
TCommandType = (ctSave, ctLoad, ... = set of ... = (stSave, ... = ... ... TCommandTypes;
function Save(AType: TSaveType): Boolean;
   procedure Load;
   procedure Clear;
end;
implementation
end.
1- суретте. Программаның жұмысы
1.5 COM – ... ... және ... ... ... ... тәуелсіз көп рет қолдануға болатын
компоненттерді құруға мүмкіндік ... ... COM ... ... орындаушы (EXE) файлдарынан және динамикалық (DLL)
кітапханаларынан тұрады.Егер олар COM – ды ... ... ... болса, онда оларды еш қиындықсыз кез – келген ... ... ... (In-Proc ... ... ... ... сервер) өзіндік процесі ... ... ... COM) компьютерде орындала алады.COM берілгендерді
жіберуге(Marshalling) ... және ... пен ... ... ... ... ... автоматты түрде шешеді.
COMмен жұмыс істеу үшін керекті архитектуралық мәліметтер:
COM ... – бұл ... ... безендірілген және тіркелген
приложение.Ол клиенттерге өздері жүзеге ... ... ... мүмкіндік береді.Сервер динамикалық кітапхана ретінде ... файл ... ... мүмкін.
DLL түріндегі сервер.
Бұл сервер әрқашанда оны жүзеге асырған (In-Process) приложенияның
адрестік аймағында орындалады.Осының әсерінен ... ... ... шығыны төмендейді.Бұл сервер қауіпсіз болып ... ... ... ... қателіктерден сақтанбаған.Сонымен
қатар ол өшірілген компьютерде орындала алмайды, ... ол ... ... ... ... ... ... Transaction Server модулін
көрсетуге болады.
Орындалушы файл ретіндегі сервер.
Бұл сервер басқа приложениялардың сұранысы бойынша COM объектілерін
құруға ... ... Windows ... ... ... табылады.Мысалы
ретінде Microsoft Office пакетін келтіруге болады.Оның приложениялары COM –
серверлар болып табылады.
1.6 Ағымдар мен бөлмелер
Windows – көптапсырмалы және ... ... – ға ... ... білдіреді:
- клиент пен сервер приложенияның әртүрлі ағымдарында немесе
процестерінде болуы мүмкін;
- серверге бір ... ... ... ... ... ... бұл мәселені COM клиенттері мен серверлері
орындалатын бөлмелер концепциясы ... ... ... (Single Threaded ... ... көпағымдыі (Multiple Threaded Apartment, MTA) болады.
STA
Бірағымды бөлмені құрған кезде COM терезе құрады.COM – серверінің ... ... ... ... ... сол ... терезеге PostMessage
арқылы хабарлама жіберіледі.Осындай жолмен шақырылған әдістер тізімі
құрылады және ... ... ... ... ... ... ерекшеліктері:
1.Программист әдістердің ... ... ... ... ... ... ... басқа объектісі
шақырылмайды.
2.Программист класс өрістерінің рұқсатының ... ... ... бір ... тек қана бір ғана әдіс ... – бір ... ... екі әдіспен рұқсат алу мүмкін емес.
STA – ның кемшіліктері:
1.Әдістерді шақырған кездегі синхрондалуға кететін ... ... әдіс ... ... ... ... ... мүмкін
емес.Мысалы бір минуттық әдіс орындалып бітпегенше COM объектті қолдануға
болмайды.Дегенімен COM – ... ... ... ең тиімді жолы STA
болып табылады.MTA – ны қолданудың тек бір мағынасы бар, егер STA ... ... ... кезде ғана.
MTA
Синхрондалудың автоматты сервисін жүзеге асырмайды және оған шектеу
қоймайтын көпағымды бөлме.Оның ішінде ... ... мен ... мүмкін және кез – келген ... ... бір ... ... – да кез – келген объектінің әдісі кез – ... ... ... сол ... ... клиент сұраныс жасаған объект басқа ағымда
шақырылуы мүмкін. MTA – да ... ... COM – ... ... және клиенттерге қол жетімділікпен ерекшеленеді.Бірақ оны
жасау үрдісі қиынырақ.
2 ПРАКТИКАЛЫҚ БӨЛІМ
2.1 COM – ... ... COM ... ұйымдастыру үшін кең мастерлерлер жиынтығын
ұсынады.Оларды File->New меню командасы арқылы шақыруға ... ... COM ... жасау үшін, біз оның құрамына COM объектісінің модулін
қосу керекпіз.DLL түрінде COM серверін ... ... COM ... ... ... құру ... ... Library» мастері арқылы жүзеге
асырылады.Оның таңдалуы кезінде жаңа жоба ... DLL ... ... ... код ... Project1;
uses
ComServ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.RES}
begin
end.
COM – ның дұрыс жұмыс істеуі үшін ... DLL ... үшін ... ... ... керек.Құрылып жатқан COM-
объекттың жүзеге асуы осы форманың жолдарының толтырылуына байланысты.
ClassName - COM-серверді жүзеге асыратын Delphi класының аты. ... ... ... ... ... COM-сервер реестерде тіркеледі.
Instansing - COM - ... ... ... ... ... ... алады:
Internal – объект тек қана осы приложенияның ішінде ғана қолданылуы
мүмкін.
Threading Model – сервердің ... ... ... ... ... ... (EXE немесе DLL) байланысты болады.
Single – ағымдарды ... ... бұл жоба Internal ... ... ... үшін DLL серверінің реестерінде ThreadingModel=
Apartment параметрі құрылады,ал EXE үшін STA ... Free үшін ... ... ThreadingModel= Free параметрі құрылады,ал EXE үшін
MTA құрылады. Both үшін DLL ... ... ... ... ... EXE үшін MTA құрылады.
Include Type Library – бұл ... ... ... серверге
кітапхананың типтері қосылады.Кітапхананың типтерімен жұмыс істеу үшін ... ... ... ... ... ... жұмыс істеу үшін автоматты түрде интерфейстік модуль ... ... ... ... ... Type ... көмегі арқылы суреттеледі.Объект ...... бұл ... өшіп ... ол ... – тен
мұрагерленеді.Бұл серверді іске қосудың ең оңай жолы болып табылады.
Implemented Interfaces – бұл өріске ... ... егер тек ... ... ... біз ... ... кодында
интерфейстерді суреттеп оларды өріске ... ... ... ... Oleautomation – бұл қасиет COM серверін OLE Automation
– мен үйлестіреді.Ол үшін біз интерфейстің әдістерінде тек қана ... ... ... ... ... ғана ... керекпіз.Ол
әсіресе бөлмелер арасында интерфейске сілтемелерді алмастыру үшін
керек.Арнайы ... DLL – ... ... ... бұл ...
интерфейс маршаллингі деп аталады.Егер ... ... ... болса,онда ол жұмысты OLE маршаллер орындайды. Oleautomation
маршаллингін ... үшін ... ... ... ... – тен ... ... Интерфейстің бүкіл әдістері safecall ретінде жариялануы тиіс.Егер
біз Iunknown – нан мұрагерленген ... ... ... оның ... stdcall ... ... ... құру үшін Type
Library ... ... ... Options ... function mapping ... All v-table ... – ке ... серверлер.
Егер осындай кітапханалар Imarshall интерфейстерін жүзеге асыра
алмайтын болса, онда олар бір бөлмеде тек қана ... ғана ... ... ... тек қана ... ... үшін ... серверді құрған кезде біз мастерге ол жүзеге асырайын деп жатқан
интерфейстерді көрсету керекпіз.Интерфейс атын Itest деп ... ... ... ... келесі модуль құрылады:
unit Unit1;
interface
uses
Windows, ActiveX, Classes, ComObj;
type
TTest = class(TComObject, ITest)
protected
end;
const
Class_Test: TGUID = '{1302FB00-703F-11D4-84DD-825B45DBA617}';
Implementation
uses ComServ;
initialization
TComObjectFactory.Create(ComServer, TTest, Class_Test,
Test', '', ciMultiInstance, tmApartment);
end.
Өз ... ... ... автоматты түрде тіркеу жеңіл
болады.Оны келесі процедура арқылы жүзеге асыруға болады:
procedure CheckComServerInstalled(const CLSID: TGUID; const ... ... ... String;
begin
Size := MAX_PATH;
SetLength(FileName, Size);
try
if RegQueryValue(HKEY_CLASSES_ROOT,
PChar(Format('CLSID\%s\InProcServer32',
[GUIDToString(CLSID)])), PChar(FileName), Size) = ERROR_SUCCESS
then
begin
SetLength(FileName, Size);
DllHandle := LoadLibrary(PChar(FileName));
     FreeLibrary(DllHandle);
if DllHandle = 0 then ... else ... ... Тіркей алмаймын.', [DllName]);
end;
end;
Процедура дискте орналасқан тіркеуден өткен ... ... ... файл ... көрсетілген ... ... ... мәліметтер өшіріледі және серверді қайтадан
тіркеуден ... ... ... DLL ... ... басқа папкаға
көшірген кезде өте қажет.
2.2 COM - серверін тіркеу
COM клиенттің сұраныс жасаған ... ... ... ... ... асырады.Кез – келген COM – объектісінің өзіндік
идентификаторы ... Class ... ... CLSID көмегі арқылы
индекстелген объектілердің реестердің ... ... ... ... ... ... (HKEY_CLASSES_ROOT\CLSID) 2 –
сурет.
2 – ... ... ... ... табу және модулін жүктеу үшін әр сервер үшін
мәліметтер ... үшін оны тек ... ... ... COM ... ... ... және керекті модульді жүктейді.Сонымен қатар объект
өзінің ... атын ... ... немесе Programmatic Identifier
(PROGID).Әдетте ол сервердің ... ... және ... аты ... ... аттың құрамында CLSID объектке
сілтеме бар.Ол PROGID – COM арқылы құрылған кезде мағынасы ... ... ... және ... бүкіл мәліметтерді қолданады.EXE түріндегі
серверлер программаның компьютерде бірінші рет қосылған ... ... ... ... тіркелуі DELPHI ұсынатын TregSvr немесе
Windows – тың ... Regsvr32 ... ... ... ... ... және параметрлердің берілуі
Клиент басқа бөлмеден сұраныс жасалған интерфейсті шақыру үшін ол ... нан ... ... сол ... ... ... ... рұқсат
сұрау керек.COM - да ондай терминді proxy деп ... ... ... ... ... ... ... proxy – ді
қарастыра алады және ол өзінің бөлмесінде жасалынған ... ... ... ... ... қатар бір уақытта сервер stub – ты өзімен ... ... ... ... ... ... мен stub – тың
арасындағы қарым – қатынасты ... COM ... ... ... шақыруы кезінде Proxy одан параметрлерді қабылдап алады ... ішкі ... ... ... ... жібереді.Stub параметрлерді
қабылдап, ашып сервердің әдісін шақыруды ұйымдастырады.Дәл сондай жолмен
параметрлердің қайтадан артқа берілуі жүзеге асады.Бұл ... ... ... ... клиент пен сервердің бөлмелері әр түрлі
ағымдардың моделдерінде және әр ... ... ... ... ... ... ... Proxy – ді құру үшін COM сервердің
құрылғысын білу ... екі ... ... болады:
1.Рroxy – ді жүзеге асыру үшін серверде Imarshal ... ... ... ... ... Language) – де интерфейсті суреттеу.
3.Ole Automation мен үйлесімді сервер жасау.Бұл жағдайда COM proxy –
ды өзі құрады.
4.Сонымен қатар ... Ole ... ... ... ... ... ... инициализациясы
COM клиенттері мен серверлері өз талаптары бойынша бөлме құру ... ... ... ... – ды қолданғысы келетін ... ... ... ... ... бөлме құру керек.Ол ActiveX.pas
модулінде келесі түрде жарияланған:
const
COINIT_MULTITHREADED      = 0;  // OLE calls objects on any ... = 2;  // ... ... ... ... ... HResult; ... парамерті болашақта қолдануға қалдырылған және NIL – ге тең
болуы керек,ал coInit параметрі құрастырылып жатқан ... ... ... ... мағыналарды қабылдауы мүмкін:
COINIT_APARTMENTTHREADED -  ағым үшін STA жасалады.Әр ағымның өзінің
STA болуы немесе болмауы мүмкін.
COINIT_MULTITHREADED - ... ... ... ... жаңа MTA ... ол басқа ағыммен жасалған болса онда
сол ағымға барып ... ... ... ... құрамында тек
қана бір MTA болады.
Егер бөлме сәтті жасалынса,онда функция S_OK қайтарады.COMмен жұмыс
аяқталған ... ActiveX ... ... ағым ... ... ... бөлмені өшіру керек:
procedure CoUninitialize; stdcall;
   
CoInitializeEx – ті шақыру ... оған ... ... ... ... ... VCL COM – ның автоматты түрде іске асуын
қамтамасыз етеді.STA құрылады.
program Project1;
uses
Forms,
ComObj,
ActiveX,
Unit1 in ... ... ... := ... Form1);
Application.Run;
end.
 
Егер COM ағымда қолданылса, онда мына функциялар Execute әдісінде
шақырылуы керек:
 
procedure TMyThread.Execute;
begin
CoInitializeEx(NIL, COINIT_MULTITHREADED);

CoUninitialize
end;
COM инициализациясы COM – ға ... Windows API – дің кез – ... ... үшін ... ... ... и ... функцияларының қатысы жоқ.
DLL алдында өзінің бөлмесін құрастырып ... ... де ... ... DLL сервері оған керекті ... ... ... ... ... ... кезінде реестрде «ThreadingModel»
параметрін енгізеді.3 – сурет. ThreadingModel параметрі ... ... ...... тек қана STA – ... істей алады.Егер ол STA – да
құрылса,онда ол шақырушы ағым бөлмесінде құрылады,егер ол МTA болса,онда
COM ... ... ... ... proxy – дан ... бөлмеде жаңа
бөлме құрады.
Free – ... тек қана MTA – да ... ... ... Егер ол МTA – ... ол шақырушы ағым бөлмесінде құрылады,егер ол STA болса,онда
COM автоматты түрде клиенттің MTAмен proxy – дан ... ... ... ......... MTA - да және STA - да да жұмыс істей ... іске ...... іске қосу үшін ... ComObj.pas модулінде суреттелген
CreateComObject функциясын шақыру керек.
function CreateComObject(const ClassID: TGUID): ... ... ... ... ... CLSID – ті қабылдайды
және оның ... Iunknown ... ... ... интерфейске сұраныс жасап онымен жұмыс істей алады.
var
COMServer: IComServer;

// COM объектісін құрып интерфейсіне ... ... ... CreateComObject(IComServer) as IComServer;
//Интерфейспен жұмыс жасаймыз.
ComServer.DoSomething;
// Интерфейсті босатамыз.
ComServer := NIL;
ҚОРЫТЫНДЫ
Осы курстық жұмысымда мен COM – технологиясын және оның Delphi – ... ... ... ... ... ... көп ... болатын компоненттерді құруға мүмкіндік береді.Бұл компоненттерді
COM серверлер деп атайды.Олар орындаушы (EXE) файлдарынан және ... ... ... ... ... ... ... оны жүзеге асырған (In-Process) ... ... ... ... сервер әдістеріне жасалған
шақырулардың шығыны төмендейді.Бұл сервер қауіпсіз болып табылмайды.Себебі
оның жадысы ... ... ... ... ол өшірілген компьютерде орындала алмайды, ... ол ... ... ... ... ретінде Microsoft Transaction Server модулін
көрсетуге болады.
Орындаушы файл ретіндегі сервер.
Бұл сервер басқа приложениялардың сұранысы ... COM ... ... беретін Windows орындалушы файлы болып ... ... Office ... ... ... ... COM –
серверлар болып табылады.
Ол клиенттерге өздері жүзеге асырған объектілерге сұраныс жасауға
мүмкіндік береді.Delphi COM ... ... үшін кең ... ... File->New меню командасы арқылы шақыруға
болады.EXE файлының ... COM ... ... ... біз оның ... ... ... қосу керекпіз.DLL түрінде COM серверін жасау үшін, ... сай ... ... құру ... ... ... ... жүзеге асырылады.Оның таңдалуы кезінде жаңа жоба құрылады.Delphi
программалау тілінде COM – серверді құрғаннан ... оны ... ... - клиенттің сұраныс жасаған серверлерін автоматты түрде іздеу
механизмін жүзеге ... ... ... ... мәліметтер қорына тіркеуін жүргізеді.Әр сервердің
орналасуын табу және модулін жүктеу үшін әр ... үшін ... үшін оны тек ... ... ... COM оны ... ... және керекті модульді жүктейді.EXE түріндегі серверлер программаның
компьютерде бірінші рет ... ... ... түрде тіркеледі.DLL
серверлерінің тіркелуі DELPHI ... TregSvr ... Windows – ... Regsvr32 программалары арқылы жүзеге асады.
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР
1. Евгений Марков. Программирование в Delphi 7.СПб.: БХВ-Петербург,
2003.
2. Флёнов М. Е. ... в Delphi. ... ... ... В. Э. ... А. Д. Delphі 6. – СПб., 2002.
4. Дмитрий О. Delphi. Профессиональное программирование 2006.
5. Delphi 7 для ... ... ... К.: ... 2005 ... Delphi 6 ... ... В.В. М.: «Ноллидж» 2001 г.
7. А. Я.Архангельский.Програмирование в Delphi 7. Издательство
«Бином»,Москва 2004 г.
8. Владимир Попов. Самоучитель Паскаль и ... ... ... ... Л.М. Delphi 7. Основы программирования.М.:Кудиц-Образ,2004.
480с.
10. Delphi и технология COM, Елманова Н.З.,Трепалин С. В.,Тенцер А.
11. ... В. В. ... баз ... в Delphi 7. ... курс
СПб.: Питер 2006.
12. Бобровский С. Delphi5: учебный ... ... ... ... А.А. ... А. - ... клиент-серверных приложений в
Delphi BHV-Санкт-Петербур 2006.
14. Delphi 5-6 Камардинов О., Шымкент 2002г .
15. Никита ... Delphi в ... и ... ... ... ... Е. Лекции по программированию на delphi 7, 2008 г. 652 ... В. ... Базы ... в Delphi 7. ... ... ... Понамарев В. COM и ActiveX в Delphi, ... 2001 ... ... Стив Тейксейра, Borland Delphi 6. Руководство разработчика 2002 г,
1120 с,ISBN:  5-8459-0305-X.
20. Сухарев М. В. ... Delphi. ... ... ... 2004, ... 600, ISBN:  ... И. Ю. ... издания:  2003,Издат.: КУДИЦ Образ, Страниц:
448,ISBN: 978-5-93378-072-4.
ҚОСЫМША
Жаңа форма құрып,оның бетіне 4 – суретте көрсетілгендей Button1,
label1, label2, label3, label4, label5, label6, ... ... және Image1 ... ... – сурет.Компоненттерді форма бетіне орналастыру.
Содан кейін келесі процедураны енгіземіз:
unit Unit1;
interface
uses
Windows, Messages, ... Classes, ... ... Forms,
Dialogs,
ExtCtrls, StdCtrls, Gauges, MyMath, Unit2;
type
TForm1 = class(TForm)
StartBtn: TButton;
Image1: TImage;
ClearBtn: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Gauge1: ... ... ... ... ... ... ... TGroupBox;
Label5: TLabel;
Label6: TLabel;
XEd: TEdit;
YEd: TEdit;
StartBtn2: TButton;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
OpenBtn: TButton;
SaveBtn: TButton;
AbBtn: TButton;
procedure StartBtnClick(Sender: TObject);
procedure ClearBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: ... ... TObject; Shift: ... ... ... ... ... StartBtn2Click(Sender: TObject);
procedure OpenBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure AbBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var ... of ... of ... ... n:cardinal;
imh,imw:word;
begin
form1.caption:='Graphics - Ïîèñê ìèíèìàëüíûõ è ìàêñèìàëüíûõ çíà÷åíèé
äëÿ ìàñøòàáèðîâàíèÿ';
form1.gauge1.maxvalue:=high(y);
if form1.mashch.checked=true then
begin
//åñëè ìàñøòàáèðîâàíèå îòìå÷åíî, òî èùåòñÿ ìíîæèòåëü äëÿ x è ... n:=0 to high(y) ... ymaxy[n] then ... ymax-ymin=0 then ymnoj:=1
else ymnoj:=imh/abs(ymax-ymin);
if xe-xs=0 then xmnoj:=1
else xmnoj:=imw/abs(xe-xs);
end else
//à åñëè ... íå ... òî ... ðàâíû íóëþ
begin
ymnoj:=1;
xmnoj:=1;
end;
form1.caption:='Graphics - Ïîèñê çàâåðøåí';
end;
procedure ris;
var n:cardinal;
imh,imw:word;
begin
form1.caption:='Graphics - Ïîñòðîåíèå ãðàôèêà';
form1.image1.canvas.pen.color:=clwhite;
imh:=form1.image1.height;
imw:=form1.image1.width;
form1.gauge1.maxvalue:=high(x);
//ðèñóåò îñè
with ... ... ... ... ... ... ... òî òî÷êè ñîåäèíÿþòñÿ ìåæäó
ñîáîé...
for n:=0 to high(x)-1 do
begin
with form1.image1.canvas do
begin
moveto(trunc((x[n]-xs)*xmnoj),imh-trunc((y[n]-ymin)*ymnoj));
lineto(trunc((x[n+1]-xs)*xmnoj),imh-trunc((y[n+1]-ymin)*ymnoj));
end;
form1.gauge1.progress:=n;
end;
form1.gauge1.progress:=high(x);
end else //à åñëè íåò, òî íå ñîåäèíÿþòñÿ
for n:=0 to high(x) ... - ... ... ... TObject);
var n:cardinal;
m:word;
str:string;
label a;
begin
form1.caption:='Graphics - Ðàñ÷åò òî÷åê';
graph:=true;
ram:=true;
xe:=strtofloat(xend.text);
xs:=strtofloat(xstart.text);
if xeabs(xe-xs))or(step=0)} then
begin
delete(str,m,1);
insert(floattostr(x[n]),str,m);
goto a;
end;
{if ((str[m]='x')or(str[m]='X'))and(x[n]

Пән: Информатика
Жұмыс түрі: Курстық жұмыс
Көлемі: 22 бет
Бұл жұмыстың бағасы: 500 теңге









Ұқсас жұмыстар
Тақырыб Бет саны
Цифрлық радиохабар таратудың дамуы6 бет
Қашықтықтықтан оқыту (қо) технологиясын ұйымдастыру29 бет
Delphі ортасында жұмыс істеу технологиясы80 бет
Операторлар және ішкі программалар (Delphi программалау ортасы)22 бет
Бастауыш сынып ана тілін оқытуда қазіргі технологияларды қолдануға болашақ мұғалімдердің даярлығын қалыптастыру121 бет
Инновациялық процестің ұғымы мен мәні7 бет
Интернет тораптарына қосылу технологиялары6 бет
Оқудың педагогикалық технологиялары 10 бет
Сайлау жүйесі туралы13 бет
Тәрбие процесінде инновациялық әдістерді қолдану жайлы ақпарат3 бет


Исходниктер
Пәндер
Көмек / Помощь
Арайлым
Біз міндетті түрде жауап береміз!
Мы обязательно ответим!
Жіберу / Отправить


Зарабатывайте вместе с нами

Рахмет!
Хабарлама жіберілді. / Сообщение отправлено.

Сіз үшін аптасына 5 күн жұмыс істейміз.
Жұмыс уақыты 09:00 - 18:00

Мы работаем для Вас 5 дней в неделю.
Время работы 09:00 - 18:00

Email: info@stud.kz

Phone: 777 614 50 20
Жабу / Закрыть

Көмек / Помощь