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

UptoLike

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

New Enumeration – ɞɨɛɚɜɥɹɟɬ ɩɟɪɟɱɢɫɥɟɧɢɟ. ɉɟɪɟɱɢɫɥɟɧɢɟ
(enumeration) ɜ ɛɢɛɥɢɨɬɟɤɟ ɬɢɩɨɜ ɚɧɚɥɨɝɢɱɧɨ ɩɟɪɟɱɢɫɥɢɦɨɦɭ ɬɢɩɭ ɜ
Delphi: ɨɛɴɹɜɥɹɟɬ ɧɚɛɨɪ ɰɟɥɵɯ ɢɞɟɧɬɢɮɢɤɚɬɨɪɨɜ;
New Alias – ɫɨɡɞɚɟɬ ɩɫɟɜɞɨɧɢɦ. ɉɫɟɜɞɨɧɢɦ (alias) ɢɫɩɨɥɶɡɭɟɬɫɹ ɜ
ɛɢɛɥɢɨɬɟɤɟ ɬɢɩɨɜ ɞɥɹ ɫɩɟɰɢɮɢɤɚɰɢɢ ɬɢɩɚ, ɤɨɬɨɪɵɣ ɠɟɥɚɬɟɥɶɧɨ ɜɤɥɸɱɢɬɶ
ɜ ɫɨɫɬɚɜ ɡɚɩɢɫɢ ɢɥɢ ɨɛɴɟɞɢɧɟɧɢɹ (union);
New Record – ɡɚɞɚɟɬ ɫɬɪɭɤɬɭɪɭ ɡɚɩɢɫɢ;
New Union – ɡɚɞɚɟɬ ɬɢɩ ɨɛɴɟɞɢɧɟɧɢɹ. Ɉɛɴɟɞɢɧɟɧɢɟ (union) – ɷɬɨ ɷɤ-
ɜɢɜɚɥɟɧɬ ɦɚɫɫɢɜɚ ɜɚɪɢɚɧɬɧɨɝɨ ɬɢɩɚ (array of variant);
New Module – ɨɩɪɟɞɟɥɹɟɬ ɧɨɜɵɣ ɦɨɞɭɥɶ. Ɇɨɞɭɥɶ ɩɪɟɞɫɬɚɜɥɹɟɬ ɫɨɛɨɣ
ɧɚɛɨɪ ɦɟɬɨɞɨɜ ɢ ɤɨɧɫɬɚɧɬ;
New Method – ɞɨɛɚɜɥɹɟɬ ɧɨɜɵɣ ɦɟɬɨɞ ɜ ɢɧɬɟɪɮɟɣɫ. ȿɫɥɢ ɜ ɫɩɢɫɤɟ
ɨɛɴɟɤɬɨɜ ɜɵɞɟɥɢɬɶ ɢɧɬɟɪɮɟɣɫ, ɬɨ ɷɬɚ ɤɧɨɩɤɚ ɫɬɚɧɨɜɢɬɫɹ ɚɤɬɢɜɧɨɣ;
New Property – ɞɨɛɚɜɥɹɟɬ ɧɨɜɨɟ ɫɜɨɣɫɬɜɨ ɜ ɢɧɬɟɪɮɟɣɫ. Ɍɚɤ ɠɟ, ɤɚɤ ɢ
ɜ ɨɛɵɱɧɵɣ ɤɥɚɫɫ Delphi, ɜ ɢɧɬɟɪɮɟɣɫ ɦɨɠɧɨ ɞɨɛɚɜɢɬɶ ɫɜɨɣɫɬɜɨ, ɤɨɬɨɪɨɟ
ɛɭɞɟɬ ɬɨɥɶɤɨ ɞɥɹ ɡɚɩɢɫɢ (read-only), ɬɨɥɶɤɨ ɞɥɹ ɱɬɟɧɢɹ (write-only) ɢɥɢ
ɞɥɹ ɱɬɟɧɢɹ ɢ ɡɚɩɢɫɢ (read-write) ɨɞɧɨɜɪɟɦɟɧɧɨ;
Refresh Implementation – ɩɪɢ ɧɚɠɚɬɢɢ ɧɚ ɷɬɭ ɤɧɨɩɤɭ ɨɛɧɨɜɥɹɟɬɫɹ
ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ ɩɪɢɥɨɠɟɧɢɹ ɫɨɨɬɜɟɬɫɬɜɟɧɧɨ ɞɚɧɧɵɦ ɜ ɪɟɞɚɤɬɨɪɟ Type
Library Editor;
Register Type Library – ɩɨɫɥɟ ɳɟɥɱɤɚ ɧɚ ɷɬɨɣ ɤɧɨɩɤɟ Delphi ɡɚɩɭɫɬɢɬ
ɩɪɨɰɟɫɫ ɤɨɦɩɢɥɹɰɢɢ ɫɨɡɞɚɜɚɟɦɨɝɨ COM-ɫɟɪɜɟɪɚ ɢ ɡɚɪɟɝɢɫɬɪɢɪɭɟɬ ɟɝɨ ɜ
ɫɢɫɬɟɦɧɨɦ ɪɟɟɫɬɪɟ Windows;
Export to IDL – ɫ ɩɨɦɨɳɶɸ ɷɬɨɣ ɤɧɨɩɤɢ ɦɨɠɧɨ ɫɮɨɪɦɢɪɨɜɚɬɶ ɩɪɨ-
ɝɪɚɦɦɧɵɣ ɤɨɞ ɜ ɮɨɪɦɚɬɟ MIDL ɢɥɢ CORBA.
3.3. ɂɫɩɨɥɶɡɨɜɚɧɢɟ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɩɪɢ
ɪɚɡɪɚɛɨɬɤɟ ɤɨɦɩɨɧɟɧɬɨɜ
Ʉɚɤ ɭɠɟ ɛɵɥɨ ɫɤɚɡɚɧɨ, ɞɥɹ ɩɨɞɤɥɸɱɟɧɢɹ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɤ ɫɨɡɞɚ-
ɜɚɟɦɨɦɭ COM-ɫɟɪɜɟɪɭ ɧɭɠɧɨ ɜ ɦɚɫɬɟɪɟ COM Object Wizard (ɪɢɫ. 2.2) ɜɵ-
ɛɪɚɬɶ ɮɥɚɠɨɤ Include Type Library. Ɍɚɤɠɟ ɦɨɠɧɨ ɩɨɞɤɥɸɱɢɬɶ ɛɢɛɥɢɨɬɟɤɭ
ɬɢɩɨɜ ɜɪɭɱɧɭɸ, ɞɨɛɚɜɢɜ ɟɟ ɜ ɩɪɨɟɤɬ ɜ ɜɢɞɟ ɪɟɫɭɪɫɚ:
{$R MyTypeLib.tlb}
ɉɪɢɦɟɱɚɧɢɟ 3.1.
ɂɧɨɝɞɚ ɧɟɨɛɯɨɞɢɦɨ, ɱɬɨɛɵ ɧɟɫɤɨɥɶɤɨ COM-
ɫɟɪɜɟɪɨɜ ɢɦɟɥɢ ɨɞɢɧɚɤɨɜɵɣ ɢɧɬɟɪɮɟɣɫ ɢ ɛɵɥɢ ɭɫɬɚɧɨɜɥɟɧɵ ɧɚ ɨɞɢɧ ɤɨɦ-
ɩɶɸɬɟɪ ɨɞɧɨɜɪɟɦɟɧɧɨ. Ⱦɥɹ ɷɬɢɯ ɰɟɥɟɣ ɛɢɛɥɢɨɬɟɤɚ ɬɢɩɨɜ ɪɟɝɢɫɬɪɢɪɭɟɬ-
ɫɹ ɜ ɫɢɫɬɟɦɟ ɨɬɞɟɥɶɧɨ ɨɬ COM-ɫɟɪɜɟɪɨɜ.
Ʉɨɝɞɚ ɢɫɩɨɥɶɡɭɟɬɫɹ ɛɢɛɥɢɨɬɟɤɚ ɬɢɩɨɜ, ɫɨɡɞɚɜɚɟɦɵɣ ɤɨɦɩɨɧɟɧɬ ɧɚ-
ɫɥɟɞɭɟɬɫɹ ɧɟ ɨɬ TComObject, ɚɨɬ TTypedComObject. ɂ ɜɦɟɫɬɨ ɝɟɧɟɪɚɬɨɪɚ
ɤɨɦɩɨɧɟɧɬɨɜ TComObjectFactory ɢɫɩɨɥɶɡɭɟɬɫɹ TTypedComObjectFactory.
35
TTypedComObject ɢ TTypedComObjectFactory ɩɪɟɞɧɚɡɧɚɱɟɧɵ ɞɥɹ ɪɚɛɨɬɵ
ɫ ɛɢɛɥɢɨɬɟɤɨɣ ɬɢɩɨɜ ɢ ɚɧɚɥɨɝɢɱɧɵ ɤɥɚɫɫɚɦ TComObject ɢ
TɋomObjectFactory.
Ⱦɥɹ ɪɟɚɥɢɡɚɰɢɢ COM-ɫɟɪɜɟɪɚ ɜ ɫɪɟɞɟ Delphi ɪɟɞɚɤɬɨɪ Type Library
Editor ɝɟɧɟɪɢɪɭɟɬ ɩɪɨɝɪɚɦɦɧɵɣ ɦɨɞɭɥɶ ɧɚ ɹɡɵɤɟ Object Pascal, ɧɟɩɨɫɪɟɞ-
ɫɬɜɟɧɧɨ ɫɜɹɡɚɧɧɵɣ ɫ ɛɢɛɥɢɨɬɟɤɨɣ ɬɢɩɨɜ. ȿɫɥɢ ɜ ɪɟɞɚɤɬɨɪɟ Type Library
Editor ɧɚɠɚɬɶ ɧɚ ɤɧɨɩɤɭ Refresh Implementation, ɬɨ ɞɚɧɧɵɟ ɷɬɨɝɨ ɦɨɞɭɥɹ
ɨɛɧɨɜɹɬɫɹ ɫɨɨɬɜɟɬɫɬɜɟɧɧɨ ɞɚɧɧɵɦ ɜ ɛɢɛɥɢɨɬɟɤɟ (tlb).
3.4. ɉɪɢɦɟɪ ɪɚɡɪɚɛɨɬɤɢ ɜɫɬɪɨɟɧɧɨɝɨ COM-ɫɟɪɜɟɪɚ
ɫ ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ
ȼɨ ɜɬɨɪɨɣ ɝɥɚɜɟ ɛɵɥ ɪɚɡɨɛɪɚɧ ɩɪɢɦɟɪ ɪɚɡɪɚɛɨɬɤɢ COM-ɫɟɪɜɟɪɚ. Ɋɟɚ-
ɥɢɡɭɟɦ ɷɬɨɬ ɩɪɢɦɟɪ ɫ ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ.
1. ɋɨɡɞɚɞɢɦ ɜɫɬɪɨɟɧɧɵɣ COM-ɫɟɪɜɟɪ, ɜɵɛɪɚɜ ɜ ɞɢɚɥɨɝɨɜɨɦ ɨɤɧɟ
New Items (ɪɢɫ. 2.1) ɷɥɟɦɟɧɬ ActiveX Library, ɢ ɫɨɯɪɚɧɢɦ ɟɝɨ ɩɨɞ ɢɦɟ-
ɧɟɦ Convert.dpr.
2. ɋɨɡɞɚɞɢɦ ɧɨɜɵɣ Ʉɨɦɩɨɧɟɧɬ, ɜɵɛɪɚɜ ɷɥɟɦɟɧɬ COM Object. ȼ Ɇɚɫɬɟɪɟ
COM Object Wizard (ɪɢɫ. 2.2) ɩɨɫɬɚɜɢɦ ɮɥɚɠɨɤ Include Type Library ɢ
ɭɛɟɪɟɦ Mark interface Oleautomation (ɬ. ɤ. ɷɬɨ ɛɭɞɟɬ ɪɚɫɫɦɨɬɪɟɧɨ ɜ ɝɥ. V).
ȼ ɩɨɥɟ Class Name ɧɚɩɢɲɟɦ ObjConvert.
3. Ʉɨɝɞɚ ɛɭɞɟɬ ɧɚɠɚɬɚ ɤɧɨɩɤɚ ɈɄ, ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɨɬɤɪɨɟɬɫɹ ɨɤɧɨ ɪɟɞɚɤ-
ɬɨɪɚ Type Library Editor. ȼ ɩɨɥɟ ɫɩɢɫɤɚ ɨɛɴɟɤɬɨɜ ɛɭɞɭɬ ɞɜɚ ɷɥɟɦɟɧɬɚ:
ObjConvert ɢ IObjConvert. ȿɫɥɢ ɢɧɬɟɪɮɟɣɫɚ IObjConvert ɧɟɬ, ɬɨ ɫɨɡ-
ɞɚɣɬɟ ɟɝɨ ɫ ɩɨɦɨɳɶɸ ɩɚɧɟɥɢ ɢɧɫɬɪɭɦɟɧɬɨɜ ɪɟɞɚɤɬɨɪɚ.
4. ɍ ɢɧɬɟɪɮɟɣɫɚ IObjConvert ɫɨɡɞɚɞɢɦ ɧɨɜɵɣ ɦɟɬɨɞ ɢ ɧɚɡɨɜɟɦ ɟɝɨ Bin. ɇɚ
ɡɚɤɥɚɞɤɟ Parameters ɜ ɫɬɪɨɤɟ Return Type ɭɫɬɚɧɨɜɢɦ ɜɨɡɜɪɚɳɚɟɦɵɣ ɬɢɩ
WordBool. ȼ ɬɚɛɥɢɰɟ ɞɨɛɚɜɢɦ ɧɨɜɵɣ ɩɚɪɚɦɟɬɪ, ɧɚɠɚɜ ɧɚ ɤɧɨɩɤɭ Add, ɢ
ɜ ɩɨɥɟ Name ɭɤɚɠɟɦ ɢɦɹ N, ɚ ɜ ɩɨɥɟ Type – Word. Ⱥɧɚɥɨɝɢɱɧɨ ɞɨɛɚɜɢɦ
ɩɚɪɚɦɟɬɪ Str, ɧɚɠɚɜ ɧɚ ɤɧɨɩɤɭ Add ɢ ɜɵɛɪɚɜ ɜ ɩɨɥɟ Modifier ɡɧɚɱɟɧɢɟ
out ɢ Retval,
ɜ ɩɨɥɟ Name – Str, ɚ ɜ ɩɨɥɟ Type – WideString.
5. Ⱥɧɚɥɨɝɢɱɧɨ ɩɭɧɤɬɭ 5 ɡɚɞɚɸɬɫɹ ɦɟɬɨɞɵ Oct ɢ Hex.
6. ɇɚɠɚɜ ɧɚ ɤɧɨɩɤɭ Refresh Implementation, ɨɛɧɨɜɢɦ ɪɟɚɥɢɡɚɰɢɸ ɤɨɞɚ.
7. Ʉɨɝɞɚ ɜɟɪɧɟɦɫɹ ɜ ɪɟɞɚɤɬɨɪ Delphi, ɦɨɞɭɥɶ ObjConvertUnit ɛɭɞɟɬ ɫɨ-
ɞɟɪɠɚɬɶ ɫɥɟɞɭɸɳɢɣ ɬɟɤɫɬ:
unit ObjConvertUnit;
interface
uses
Windows, ActiveX, ComObj, Convert_TLB;
36
     New Enumeration – ��������� ������������. ������������                TTypedComObject � TTypedComObjectFactory ������������� ��� ������
(enumeration) � ���������� ����� ���������� ������������� ���� �           � ����������� ����� � ���������� ������� TComObject �
Delphi: ��������� ����� ����� ���������������;                             T�omObjectFactory.
     New Alias – ������� ���������. ��������� (alias) ������������ �            ��� ���������� COM-������� � ����� Delphi �������� Type Library
���������� ����� ��� ������������ ����, ������� ���������� ��������        Editor ���������� ����������� ������ �� ����� Object Pascal, ��������-
� ������ ������ ��� ����������� (union);                                   ������� ��������� � ����������� �����. ���� � ��������� Type Library
     New Record – ������ ��������� ������;                                 Editor ������ �� ������ Refresh Implementation, �� ������ ����� ������
     New Union – ������ ��� �����������. ����������� (union) – ��� ��-     ��������� �������������� ������ � ���������� (tlb).
�������� ������� ����������� ���� (array of variant);
     New Module – ���������� ����� ������. ������ ������������ �����             3.4. ������ ���������� ����������� COM-�������
����� ������� � ��������;                                                               � �������������� ���������� �����
     New Method – ��������� ����� ����� � ���������. ���� � ������
�������� �������� ���������, �� ��� ������ ���������� ��������;                �� ������ ����� ��� �������� ������ ���������� COM-�������. ���-
     New Property – ��������� ����� �������� � ���������. ��� ��, ��� �    ������ ���� ������ � �������������� ���������� �����.
� ������� ����� Delphi, � ��������� ����� �������� ��������, �������       1. �������� ���������� COM-������, ������ � ���������� ����
����� ������ ��� ������ (read-only), ������ ��� ������ (write-only) ���       New Items (���. 2.1) ������� ActiveX Library, � �������� ��� ��� ���-
��� ������ � ������ (read-write) ������������;                                ��� Convert.dpr.
     Refresh Implementation – ��� ������� �� ��� ������ �����������        2. �������� ����� ���������, ������ ������� COM Object. � �������
����������� ��� ���������� �������������� ������ � ��������� Type             COM Object Wizard (���. 2.2) �������� ������ Include Type Library �
Library Editor;                                                               ������ Mark interface Oleautomation (�. �. ��� ����� ����������� � ��. V).
     Register Type Library – ����� ������ �� ���� ������ Delphi ��������      � ���� Class Name ������� ObjConvert.
������� ���������� ������������ COM-������� � �������������� ��� �         3. ����� ����� ������ ������ ��, ������������� ��������� ���� �����-
��������� ������� Windows;                                                    ���� Type Library Editor. � ���� ������ �������� ����� ��� ��������:
     Export to IDL – � ������� ���� ������ ����� ������������ ���-            ObjConvert � IObjConvert. ���� ���������� IObjConvert ���, �� ���-
�������� ��� � ������� MIDL ��� CORBA.                                        ����� ��� � ������� ������ ������������ ���������.
                                                                           4. � ���������� IObjConvert �������� ����� ����� � ������� ��� Bin. ��
           3.3. ������������� ���������� ����� ���                            �������� Parameters � ������ Return Type ��������� ������������ ���
                    ���������� �����������                                    WordBool. � ������� ������� ����� ��������, ����� �� ������ Add, �
                                                                              � ���� Name ������ ��� N, � � ���� Type – Word. ���������� �������
    ��� ��� ���� �������, ��� ����������� ���������� ����� � �����-           �������� Str, ����� �� ������ Add � ������ � ���� Modifier ��������
������� COM-������� ����� � ������� COM Object Wizard (���. 2.2) ��-          out � Retval, � ���� Name – Str, � � ���� Type – WideString.
����� ������ Include Type Library. ����� ����� ���������� ����������       5. ���������� ������ 5 �������� ������ Oct � Hex.
����� �������, ������� �� � ������ � ���� �������:                         6. ����� �� ������ Refresh Implementation, ������� ���������� ����.
    {$R MyTypeLib.tlb}                                                     7. ����� �������� � �������� Delphi, ������ ObjConvertUnit ����� ��-
                                                                              ������� ��������� �����:
     ���������� 3.1. ������ ����������, ����� ��������� COM-
�������� ����� ���������� ��������� � ���� ����������� �� ���� ���-                unit ObjConvertUnit;
������ ������������. ��� ���� ����� ���������� ����� ������������-
�� � ������� �������� �� COM-��������.                                             interface

    ����� ������������ ���������� �����, ����������� ��������� ��-                 uses
��������� �� �� TComObject, � �� TTypedComObject. � ������ ����������                     Windows, ActiveX, ComObj, Convert_TLB;
����������� TComObjectFactory ������������ TTypedComObjectFactory.

                                   35                                                                           36