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

UptoLike

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

type
TObjConvert = class(TTypedComObject, IConvert)
protected
function Bin(N: Word; var Str: WideString): WordBool;
stdcall;
function Oct(N: Word; var Str: WideString): WordBool;
stdcall;
function Hex(N: Word; var Str: WideString): WordBool;
stdcall;
{Declare IObjConvert methods here}
end;
implementation
uses ComServ;
function TObjConvert.Bin (N: Word; var Str: WideString): Word-
Bool;
begin
end;
function TObjConvert.Oct(N: Word; var Str: WideString): Word-
Bool;
begin
end;
function TObjConvert.Hex(N: Word; var Str: WideString): Word-
Bool;
begin
end;
initialization
TTypedComObjectFactory.Create(ComServer, TObjConvert,
Class_ObjConvert, ciMultiInstance,
tmSingle);
end.
ɗɬɨ ɲɚɛɥɨɧ ɧɚɲɟɝɨ COM-ɤɥɚɫɫɚ, ɩɨɞɝɨɬɨɜɥɟɧɧɵɣ ɫɪɟɞɨɣ Delphi,
ɤɨɬɨɪɵɣ ɧɟɨɛɯɨɞɢɦɨ ɞɨɪɚɛɨɬɚɬɶ.
8. ȼ ɦɨɞɭɥɟ ObjConvertUnit ɪɟɚɥɢɡɭɟɦ ɮɭɧɤɰɢɢ Bin, Oct, Hex, ɤɚɤ ɜ
ɱɟɬɜɟɪɬɨɦ ɩɭɧɤɬɟ ɜɬɨɪɨɣ ɱɚɫɬɢ.
9. ɉɪɢɥɨɠɟɧɢɟ ɦɨɠɧɨ ɨɬɤɨɦɩɢɥɢɪɨɜɚɬɶ, ɧɚɠɚɜ ɫɨɱɟɬɚɧɢɟ ɤɥɚɜɢɲ
Ctrl+F9. ɋɨɡɞɚɧɧɵɣ ɩɪɢ ɷɬɨɦ COM-ɫɟɪɜɟɪ ɝɨɬɨɜ ɤ ɢɫɩɨɥɶɡɨɜɚ-
ɧɢɸ.
37
IV. Ɋɚɡɪɚɛɨɬɤɚ ɩɪɢɥɨɠɟɧɢɣ, ɢɫɩɨɥɶɡɭɸɳɢɯ
COM-ɫɟɪɜɟɪɵ
4.1. ɉɨɥɭɱɟɧɢɟ ɫɫɵɥɤɢ ɧɚ ɢɧɬɟɪɮɟɣɫ ɤɨɦɩɨɧɟɧɬɚ.
Ɏɭɧɤɰɢɢ CreateComObject ɢ ProgIdToClassId
ɉɪɢ ɪɚɛɨɬɟ ɫ ɤɨɦɩɨɧɟɧɬɨɦ COM ɩɪɢɥɨɠɟɧɢɟ ɞɨɥɠɧɨ ɩɪɹɦɨ ɢɥɢ ɤɨɫ-
ɜɟɧɧɨ ɩɨɥɭɱɢɬɶ ɫɫɵɥɤɭ ɧɚ ɟɝɨ ɢɧɬɟɪɮɟɣɫ. Ⱦɥɹ ɷɬɢɯ ɰɟɥɟɣ ɜ Delphi ɨɩɪɟ-
ɞɟɥɟɧɚ ɮɭɧɤɰɢɹ CreateComObject, ɤɨɬɨɪɚɹ ɜ ɤɚɱɟɫɬɜɟ ɩɚɪɚɦɟɬɪɚ ɩɪɢɧɢɦɚ-
ɟɬ CLSID ɡɚɩɪɚɲɢɜɚɟɦɨɝɨ ɤɨɦɩɨɧɟɧɬɚ, ɢ, ɟɫɥɢ ɤɨɦɩɨɧɟɧɬ ɡɚɪɟɝɢɫɬɪɢɪɨ-
ɜɚɧ ɜ ɫɢɫɬɟɦɟ, ɜɨɡɜɪɚɳɚɟɬ ɢɧɬɟɪɮɟɣɫ IUnknown, ɱɟɪɟɡ ɤɨɬɨɪɵɣ ɦɨɠɧɨ
ɩɨɥɭɱɢɬɶ ɨɫɬɚɥɶɧɵɟ ɢɧɬɟɪɮɟɣɫɵ:
function CreateComObject(const ClassID: TGUID): IUnknown;
Ⱦɨɫɬɭɩ ɤ ɢɧɬɟɪɮɟɣɫɚɦ ɨɛɴɟɤɬɨɜ ɚɜɬɨɦɚɬɢɡɚɰɢɢ (ɫɦ. ɝɥ. V) ɦɨɠɧɨ
ɩɨɥɭɱɢɬɶ ɬɚɤɠɟ ɢ ɫ ɩɨɦɨɳɶɸ ɮɭɧɤɰɢɢ:
function CreateOleObject(const ClassName: string): IDispatch;
ȼ ɤɚɱɟɫɬɜɟ ɩɚɪɚɦɟɬɪɚ ɜ ɞɚɧɧɭɸ ɮɭɧɤɰɢɸ ɩɟɪɟɞɚɟɬɫɹ ɞɪɭɠɟɫɬɜɟɧɧɨɟ
ɢɦɹ, ɫɨɫɬɨɹɳɟɟ ɢɡ ɢɦɟɧɢ COM-ɫɟɪɜɟɪɚ ɢ ɢɦɟɧɢ ɤɨɦɩɨɧɟɧɬɚ, ɤɨɬɨɪɵɟ
ɪɚɡɞɟɥɟɧɵ ɬɨɱɤɨɣ:
‘<ɢɦɹ COM-ɢɧɬɟɪɮɟɣɫɚ>.<ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>’
CLSID ɤɨɦɩɨɧɟɧɬɚ ɦɨɠɧɨ ɩɨɥɭɱɢɬɶ ɫ ɩɨɦɨɳɶɸ ɮɭɧɤɰɢɢ ProgIdTo-
ClassId:
function ProgIDToClassID(const ProgID: string): TGUID;
ȼ ɤɚɱɟɫɬɜɟ ɩɚɪɚɦɟɬɪɚ ɜ ɮɭɧɤɰɢɸ ɩɨɞɚɟɬɫɹ ɫɬɪɨɤɚ ɫ ɞɪɭɠɟɫɬɜɟɧɧɵɦ
ɢɦɟɧɟɦ ɤɨɦɩɨɧɟɧɬɚ. Ɋɟɡɭɥɶɬɚɬɨɦ ɹɜɥɹɟɬɫɹ CLSID ɤɨɦɩɨɧɟɧɬɚ, ɯɪɚɧɹɳɟ-
ɝɨɫɹ ɜ COM-ɫɟɪɜɟɪɟ. ɇɚɩɪɢɦɟɪ, ɟɫɥɢ ɜɵɡɜɚɬɶ ɞɚɧɧɭɸ ɮɭɧɤɰɢɸ ɫ ɩɚɪɚ-
ɦɟɬɪɨɦ ‘Word.Application’, ɬɨ ɮɭɧɤɰɢɹ ɜɟɪɧɟɬ ɫɥɟɞɭɸɳɢɣ GUID (ɢɞɟɧ-
ɬɢɮɢɤɚɬɨɪ ɩɪɢɥɨɠɟɧɢɹ Microsoft Word): ‘{000209FF-0000-0000-C000-
000000000046}’.
Ⱦɥɹ ɬɨɝɨ, ɱɬɨɛɵ ɩɨɥɭɱɢɬɶ ɭɤɚɡɚɬɟɥɶ ɧɚ ɭɠɟ ɡɚɩɭɳɟɧɧɵɣ ɜ ɫɢɫɬɟɦɟ
ɨɛɴɟɤɬ ɚɜɬɨɦɚɬɢɡɚɰɢɢ, ɢɫɩɨɥɶɡɭɟɬɫɹ ɮɭɧɤɰɢɹ
function GetActiveOleObject(const ClassName: string): IDispatch;
Ʉɚɤ ɢ ɜ ɩɪɨɰɟɞɭɪɟ CreateOleObject, ɜ ɮɭɧɤɰɢɸ ɩɟɪɟɞɚɟɬɫɹ ɞɪɭɠɟɫɬ-
ɜɟɧɧɨɟ ɢɦɹ ɨɛɴɟɤɬɚ. Ɏɭɧɤɰɢɹ ɩɪɨɫɦɚɬɪɢɜɚɟɬ ɬɚɛɥɢɰɭ ɜɵɩɨɥɧɹɟɦɵɯ ɨɛɴ-
ɟɤɬɨɜ Windows (Running Table Objects) ɜ ɩɨɢɫɤɚɯ ɡɚɩɪɚɲɢɜɚɟɦɨɝɨ ɫɟɪɜɟ-
ɪɚ. ȿɫɥɢ ɬɚɤɨɣ ɛɭɞɟɬ ɧɚɣɞɟɧ, ɬɨ ɮɭɧɤɰɢɹ ɜɟɪɧɟɬ ɫɫɵɥɤɭ ɧɚ ɢɧɬɟɪɮɟɣɫ
IDispatch ɷɬɨɝɨ ɫɟɪɜɟɪɚ.
38
   type                                                                     IV. ���������� ����������, ������������
          TObjConvert = class(TTypedComObject, IConvert)
          protected
                                                                                          COM-�������
             function Bin(N: Word; var Str: WideString): WordBool;
                                                                         4.1. ��������� ������ �� ��������� ����������.
             stdcall;
             function Oct(N: Word; var Str: WideString): WordBool;            ������� CreateComObject � ProgIdToClassId
             stdcall;
             function Hex(N: Word; var Str: WideString): WordBool;       ��� ������ � ����������� COM ���������� ������ ����� ��� ���-
             stdcall;                                                ����� �������� ������ �� ��� ���������. ��� ���� ����� � Delphi ����-
             {Declare IObjConvert methods here}                      ������ ������� CreateComObject, ������� � �������� ��������� �������-
          end;                                                       �� CLSID �������������� ����������, �, ���� ��������� ������������-
                                                                     ��� � �������, ���������� ��������� IUnknown, ����� ������� �����
   implementation                                                    �������� ��������� ����������:
   uses ComServ;                                                         function CreateComObject(const ClassID: TGUID): IUnknown;

   function TObjConvert.Bin (N: Word; var Str: WideString): Word-        ������ � ����������� �������� ������������� (��. ��. V) �����
   Bool;                                                             �������� ����� � � ������� �������:
   begin                                                                 function CreateOleObject(const ClassName: string): IDispatch;
   end;                                                                  � �������� ��������� � ������ ������� ���������� �������������
                                                                     ���, ��������� �� ����� COM-������� � ����� ����������, �������
   function TObjConvert.Oct(N: Word; var Str: WideString): Word-     ��������� ������:
   Bool;
   begin                                                                          ‘<��� COM-����������>.<��� ����������>’

   end;                                                                   CLSID ���������� ����� �������� � ������� ������� ProgIdTo-
                                                                     ClassId:
   function TObjConvert.Hex(N: Word; var Str: WideString): Word-         function ProgIDToClassID(const ProgID: string): TGUID;
   Bool;
   begin                                                                  � �������� ��������� � ������� �������� ������ � �������������
                                                                     ������ ����������. ����������� �������� CLSID ����������, �������-
   end;                                                              ���� � COM-�������. ��������, ���� ������� ������ ������� � ����-
   initialization                                                    ������ ‘Word.Application’, �� ������� ������ ��������� GUID (����-
      TTypedComObjectFactory.Create(ComServer, TObjConvert,          ��������� ���������� Microsoft Word): ‘{000209FF-0000-0000-C000-
                       Class_ObjConvert, ciMultiInstance,            000000000046}’.
                       tmSingle);                                         ��� ����, ����� �������� ��������� �� ��� ���������� � �������
   end.                                                              ������ �������������, ������������ �������
                                                                         function GetActiveOleObject(const ClassName: string): IDispatch;
   ��� ������ ������ COM-������, �������������� ������ Delphi,
   ������� ���������� ����������.                                         ��� � � ��������� CreateOleObject, � ������� ���������� �������-
8. � ������ ObjConvertUnit ��������� ������� Bin, Oct, Hex, ��� �    ������ ��� �������. ������� ������������� ������� ����������� ���-
   ��������� ������ ������ �����.                                    ����� Windows (Running Table Objects) � ������� �������������� �����-
9. ���������� ����� ���������������, ����� ��������� ������          ��. ���� ����� ����� ������, �� ������� ������ ������ �� ���������
   Ctrl+F9. ��������� ��� ���� COM-������ ����� � ����������-        IDispatch ����� �������.
   ���.
                                37                                                                      38