Основы COM-технологий. Артемов М.А. и др. - 24 стр.

UptoLike

Составители: 

ɉɪɢɦɟɧɟɧɢɟ ɢɧɬɟɪɮɟɣɫɨɜ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ ɨɛɟɫɩɟɱɢɜɚɟɬ ɛɵɫɬɪɵɣ
ɜɵɡɨɜ ɦɟɬɨɞɨɜ ɢɧɬɟɪɮɟɣɫɚ ɩɪɢ ɩɨɡɞɧɟɦ ɫɜɹɡɵɜɚɧɢɢ, ɬɚɤ ɤɚɤ ɜ ɷɬɨɦ ɫɥɭ-
ɱɚɟ ɫɢɫɬɟɦɟ ɧɟ ɬɪɟɛɭɟɬɫɹ ɜɵɡɵɜɚɬɶ ɩɪɨɰɟɞɭɪɭ GetIDsOfNames. ȼ ɤɨɦɩɨ-
ɧɟɧɬɟ ɪɟɚɥɢɡɭɟɬɫɹ ɬɨɥɶɤɨ ɨɛɵɱɧɵɣ ɢɧɬɟɪɮɟɣɫ, ɚ ɢɧɬɟɪɮɟɣɫ ɞɢɫɩɟɬɱɟɪɢ-
ɡɚɰɢɢ ɦɨɠɟɬ ɩɪɢɦɟɧɹɬɶɫɹ ɬɨɥɶɤɨ ɜ ɩɪɨɰɟɫɫɟ ɨɛɪɚɳɟɧɢɹ ɤɥɢɟɧɬɚ ɤ COM-
ɫɟɪɜɟɪɭ.
5.3. ɉɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ ɜɫɬɪɨɟɧɧɨɝɨ COM-ɫɟɪɜɟɪɚ
ɚɜɬɨɦɚɬɢɡɚɰɢɢ
ȼ ɤɚɱɟɫɬɜɟ ɩɪɢɦɟɪɚ ɪɟɚɥɢɡɚɰɢɢ ɜɫɬɪɨɟɧɧɨɝɨ COM-ɫɟɪɜɟɪɚ ɚɜɬɨɦɚ-
ɬɢɡɚɰɢɢ ɪɟɚɥɢɡɭɟɦ ɤɨɦɩɨɧɟɧɬ ɩɟɪɟɜɨɞɚ ɰɟɥɨɝɨ ɱɢɫɥɚ ɜ ɞɜɨɢɱɧɵɣ, ɜɨɫɶ-
ɦɟɪɢɱɧɵɣ ɢ ɲɟɫɬɧɚɞɰɚɬɟɪɢɱɧɵɣ ɜɢɞ, ɤɨɬɨɪɵɣ ɛɭɞɟɬ ɜɵɜɨɞɢɬɶɫɹ ɜ ɜɢɞɟ
ɫɬɪɨɤɢ.
1. ȼɵɩɨɥɧɢɜ ɞɟɣɫɬɜɢɹ, ɨɩɢɫɚɧɧɵɟ ɜ ɩ. 2.2, ɫɨɯɪɚɧɢɦ ɩɪɨɟɤɬ ɩɨɞ
ɢɦɟɧɟɦ Convert.dpr.
2. Ɂɚɬɟɦ ɜɵɛɟɪɟɦ ɷɥɟɦɟɧɬ Automation Object ɜ ɞɢɚɥɨɝɨɜɨɦ ɨɤɧɟ New
Items (ɩ. 2.3). ȼ ɩɨɥɟ Class Name, ɦɚɫɬɟɪɚ Automation Objeɫt Wiz-
ard ɜɜɟɞɟɦ ObjConvert. ɇɚɠɚɜ ɧɚ ɤɧɨɩɤɭ OK, ɩɨɥɭɱɢɦ ɦɨɞɭɥɶ
ɫɥɟɞɭɸɳɟɝɨ ɫɨɞɟɪɠɚɧɢɹ:
unit Unit1;
interface
uses
ComObj, ActiveX, ObjConvert_TLB, StdVcl;
type
TObjConvert_ = class(TAutoObject, IObjConvert)
protected
{ Protected declarations }
end;
implementation
uses ComServ;
initialization
TAutoObjectFactory.Create(ComServer, TObjConvert_,
Class_ObjConvert_, ciMultiInstance, tmApartment);
end.
3. Ⱥɧɚɥɨɝɢɱɧɨ, ɤɚɤ ɢ ɜ ɩɪɢɦɟɪɟ ɩ. 3.4, ɨɩɢɲɟɦ ɜ ɢɧɬɟɪɮɟɣɫɟ
IObjConvert ɦɟɬɨɞɵ Bin, Hex, Oct.
47
4. ȼɨɡɜɪɚɬɢɦɫɹ ɜ ɦɨɞɭɥɶ Unit1. ȼ ɪɚɡɞɟɥɟ ɨɩɢɫɚɧɢɹ ɬɢɩɨɜ ɞɚɧɨ ɧɚɱɚɥɶ-
ɧɨɟ ɨɩɢɫɚɧɢɟ ɧɚɲɟɝɨ ɤɨɦɩɨɧɟɧɬɚ. ɂɫɯɨɞɹ ɢɡ ɷɬɨɝɨ ɨɩɢɫɚɧɢɹ, ɧɚɲ
ɤɨɦɩɨɧɟɧɬ ɧɚɫɥɟɞɭɟɬɫɹ ɨɬ ɤɥɚɫɫɚ TAutoɋomObject ɢ ɩɨɞɞɟɪɠɢɜɚɟɬ
ɢɧɬɟɪɮɟɣɫ IObjConvert. ȼ ɪɚɡɞɟɥɟ protected ɨɛɴɹɜɥɟɧɵ ɬɪɢ ɮɭɧɤɰɢɢ:
TObjConvert = class(TComObject, IConvert)
protected
{Declare IConvert methods here}
function Bin (const n: Word; var Str: WideString): Boolean;
stdcall;
function Oct(const n: Word; var Str: WideString): Boolean;
stdcall;
function Hex(const n: Word; var Str: WideString): Boolean;
stdcall;
end;
5. Ɉɫɬɚɟɬɫɹ ɬɨɥɶɤɨ ɪɟɚɥɢɡɨɜɚɬɶ ɮɭɧɤɰɢɢ Bin, Hex ɢ Oct ɚɧɚɥɨɝɢɱɧɨ, ɤɚɤ
ɢ ɜ ɩɪɢɦɟɪɟ ɩ. 3.4.
6. Ɉɬɤɨɦɩɢɥɢɪɨɜɚɜ ɩɪɢɥɨɠɟɧɢɟ, ɩɨɥɭɱɢɦ COM-ɫɟɪɜɟɪ, ɝɨɬɨɜɵɣ ɤ ɢɫ-
ɩɨɥɶɡɨɜɚɧɢɸ. Ɉɧ ɛɭɞɟɬ ɧɚɯɨɞɢɬɶɫɹ ɜ ɛɢɛɥɢɨɬɟɤɟ Convert.dll.
5.4. ɉɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ ɜɧɟɲɧɟɝɨ COM-ɫɟɪɜɟɪɚ
ɚɜɬɨɦɚɬɢɡɚɰɢɢ
ȼɧɟɲɧɢɟ COM-ɫɟɪɜɟɪɵ ɨɛɵɱɧɨ ɰɟɥɟɫɨɨɛɪɚɡɧɨ ɫɨɡɞɚɜɚɬɶ ɬɨɥɶɤɨ ɜ
ɬɟɯ ɫɥɭɱɚɹɯ, ɤɨɝɞɚ ɫɟɪɜɟɪ ɞɨɥɠɟɧ ɪɚɛɨɬɚɬɶ ɤɚɤ ɚɜɬɨɧɨɦɧɨɟ ɩɪɢɥɨɠɟɧɢɟ ɫɨ
ɫɜɨɢɦɢ ɫɨɛɫɬɜɟɧɧɵɦɢ ɩɪɚɜɚɦɢ.
ɉɪɢɦɟɱɚɧɢɟ 5.2.
ɍɞɚɥɟɧɧɵɣ ɞɨɫɬɭɩ, ɬ. ɟ. ɞɨɫɬɭɩ ɨɬ ɤɥɢɟɧɬɚ, ɜɵ-
ɩɨɥɧɹɟɦɨɝɨ ɧɚ ɞɪɭɝɨɦ ɤɨɦɩɶɸɬɟɪɟ ɫ ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ DCOM, ɜɨɡɦɨɠɟɧ
ɬɨɥɶɤɨ ɤ ɜɧɟɲɧɟɦɭ ɫɟɪɜɟɪɭ ɚɜɬɨɦɚɬɢɡɚɰɢɢ.
ɉɪɢɜɟɞɟɦ ɩɪɨɫɬɨɣ ɩɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ ɜɧɟɲɧɟɝɨ COM-ɫɟɪɜɟɪɚ, ɤɨ-
ɬɨɪɵɣ ɩɨɞɞɟɪɠɢɜɚɟɬ ɤɨɦɩɨɧɟɧɬ ɚɜɬɨɦɚɬɢɡɚɰɢɢ ɞɥɹ ɢɡɦɟɧɟɧɢɹ ɰɜɟɬɚ
ɮɨɪɦɵ ɤɥɢɟɧɬɨɦ.
1. ɋɨɡɞɚɞɢɦ ɧɨɜɵɣ ɩɪɨɟɤɬ-ɩɪɢɥɨɠɟɧɢɟ MyServer.dpr ɫɨ ɫɜɨɟɣ ɮɨɪɦɨɣ.
2. ɉɨɦɟɫɬɢɦ ɜ ɩɪɨɟɤɬ ɨɛɴɟɤɬ ɚɜɬɨɦɚɬɢɡɚɰɢɢ, ɜɵɛɪɚɜ ɧɚ ɡɚɤɥɚɞɤɟ
ActiveX ɞɢɚɥɨɝɨɜɨɝɨ ɨɤɧɚ New Items (ɪɢɫ. 2.1) ɷɥɟɦɟɧɬ Automation
Object. ȼ ɩɨɥɟ Class Name ɦɚɫɬɟɪɚ Automation Objeɫt Wizard ɭɤɚɠɟɦ
AutoServer. ɇɚɠɚɜ ɧɚ ɤɧɨɩɤɭ OK, ɩɨɥɭɱɢɦ ɲɚɛɥɨɧ ɞɥɹ ɪɟɚɥɢɡɚɰɢɢ
ɤɨɦɩɨɧɟɧɬɚ ɚɜɬɨɦɚɬɢɡɚɰɢɢ.
3. ɂɫɩɨɥɶɡɭɹ ɪɟɞɚɤɬɨɪ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ, ɡɚɞɚɞɢɦ ɫɜɨɣɫɬɜɨ Color,
ɞɨɫɬɭɩɧɨɟ ɞɥɹ ɱɬɟɧɢɹ ɢ ɡɚɩɢɫɢ, ɜ ɢɧɬɟɪɮɟɣɫɟ IObjServer.
48
     ���������� ����������� ��������������� ������������ �������             4. ����������� � ������ Unit1. � ������� �������� ����� ���� ������-
����� ������� ���������� ��� ������� ����������, ��� ��� � ���� ���-            ��� �������� ������ ����������. ������ �� ����� ��������, ���
��� ������� �� ��������� �������� ��������� GetIDsOfNames. � �����-             ��������� ����������� �� ������ TAuto�omObject � ������������
����� ����������� ������ ������� ���������, � ��������� ����������-             ��������� IObjConvert. � ������� protected ��������� ��� �������:
����� ����� ����������� ������ � �������� ��������� ������� � COM-                TObjConvert = class(TComObject, IConvert)
�������.                                                                          protected
                                                                                      {Declare IConvert methods here}
     5.3. ������ ���������� ����������� COM-�������                                   function Bin (const n: Word; var Str: WideString): Boolean;
                      �������������                                                   stdcall;
                                                                                      function Oct(const n: Word; var Str: WideString): Boolean;
    � �������� ������� ���������� ����������� COM-������� ������-                     stdcall;
������� ��������� ��������� �������� ������ ����� � ��������, ����-                   function Hex(const n: Word; var Str: WideString): Boolean;
�������� � ����������������� ���, ������� ����� ���������� � ����                     stdcall;
������.                                                                           end;
    1. �������� ��������, ��������� � �. 2.2, �������� ������ ���            5. �������� ������ ����������� ������� Bin, Hex � Oct ����������, ���
       ������ Convert.dpr.                                                      � � ������� �. 3.4.
    2. ����� ������� ������� Automation Object � ���������� ���� New         6. �������������� ����������, ������� COM-������, ������� � ��-
       Items (�. 2.3). � ���� Class Name, ������� Automation Obje�t Wiz-        �����������. �� ����� ���������� � ���������� Convert.dll.
       ard ������ ObjConvert. ����� �� ������ OK, ������� ������
       ���������� ����������:                                                     5.4. ������ ���������� �������� COM-�������
     unit Unit1;                                                                                  �������������

     interface                                                                  ������� COM-������� ������ ������������� ��������� ������ �
                                                                           ��� �������, ����� ������ ������ �������� ��� ���������� ���������� ��
     uses
                                                                           ������ ������������ �������.
            ComObj, ActiveX, ObjConvert_TLB, StdVcl;
     type                                                                      ���������� 5.2. ��������� ������, �. �. ������ �� �������, ��-
            TObjConvert_ = class(TAutoObject, IObjConvert)                 ���������� �� ������ ���������� � �������������� DCOM, ��������
            protected                                                      ������ � �������� ������� �������������.
               { Protected declarations }                                      �������� ������� ������ ���������� �������� COM-�������, ��-
            end;                                                           ����� ������������ ��������� ������������� ��� ��������� �����
     implementation                                                        ����� ��������.
                                                                              1. �������� ����� ������-���������� MyServer.dpr �� ����� ������.
     uses ComServ;
                                                                              2. �������� � ������ ������ �������������, ������ �� ��������
     initialization                                                              ActiveX ����������� ���� New Items (���. 2.1) ������� Automation
         TAutoObjectFactory.Create(ComServer, TObjConvert_,                      Object. � ���� Class Name ������� Automation Obje�t Wizard ������
                    Class_ObjConvert_, ciMultiInstance, tmApartment);            AutoServer. ����� �� ������ OK, ������� ������ ��� ����������
     end.                                                                        ���������� �������������.
                                                                              3. ��������� �������� ���������� �����, ������� �������� Color,
    3. ����������, ��� � � ������� �. 3.4, ������ � ����������
                                                                                 ��������� ��� ������ � ������, � ���������� IObjServer.
       IObjConvert ������ Bin, Hex, Oct.


                                    47                                                                       48