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

UptoLike

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

4.2. ɗɤɫɩɨɪɬ ɨɩɢɫɚɧɢɹ ɢɧɬɟɪɮɟɣɫɨɜ ɢɡ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ
COM-ɫɟɪɜɟɪɚ
ȼ ɬɪɟɬɶɟɣ ɝɥɚɜɟ ɪɚɡɨɛɪɚɧɨ ɩɪɢɦɟɧɟɧɢɟ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɜ COM-
ɫɟɪɜɟɪɚɯ. Ȼɢɛɥɢɨɬɟɤɚ ɬɢɩɨɜ ɯɪɚɧɢɬɫɹ ɜ COM-ɫɟɪɜɟɪɟ ɜ ɜɢɞɟ ɪɟɫɭɪɫɚ, ɢ
ɞɨɫɬɭɩ ɤ ɟɟ ɞɚɧɧɵɦ ɦɨɠɧɨ ɩɨɥɭɱɢɬɶ ɫ ɩɨɦɨɳɶɸ ɫɬɚɧɞɚɪɬɧɵɯ ɫɪɟɞɫɬɜ
WinAPI (ɩɨɞɪɨɛɧɟɟ ɫɦ. [7 ɝɥ. 3]). Ɍɚɤɠɟ ɜ Delphi ɩɪɟɞɭɫɦɨɬɪɟɧɨ ɞɪɭɝɨɟ
ɫɬɚɧɞɚɪɬɧɨɟ ɫɪɟɞɫɬɜɨ ɞɥɹ ɝɟɧɟɪɚɰɢɢ ɩɪɨɝɪɚɦɦɧɨɝɨ ɤɨɞɚ ɧɚ ɹɡɵɤɟ Object
Pascal, ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɨɩɢɫɚɧɢɸ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ. Ⱦɥɹ ɷɬɨɝɨ ɧɭɠɧɨ
ɨɬɤɪɵɬɶ ɞɢɚɥɨɝɨɜɨɟ ɨɤɧɨ Import Type Library (ɪɢɫ. 4.1), ɜɵɛɪɚɜ ɜ ɝɥɚɜɧɨɦ
ɦɟɧɸ ɷɥɟɦɟɧɬ Project/Import Type Library….
Ɋɢɫ. 4.1. Ⱦɢɚɥɨɝɨɜɨɟ ɨɤɧɨ Import Type Library
39
ȼɜɟɪɯɭ ɷɬɨɝɨ ɞɢɚɥɨɝɨɜɨɝɨ ɨɤɧɚ ɧɚɯɨɞɢɬɫɹ ɫɩɢɫɨɤ ɫɭɳɟɫɬɜɭɸɳɢɯ
COM-ɫɟɪɜɟɪɨɜ. Ⱦɨɛɚɜɢɬɶ ɧɨɜɵɣ COM-ɫɟɪɜɟɪ ɜ ɷɬɨɬ ɫɩɢɫɨɤ ɦɨɠɧɨ ɫ ɩɨ-
ɦɨɳɶɸ ɤɧɨɩɤɢ Add…, ɭɞɚɥɢɬɶ – Remove. Ⱦɚɧɧɵɟ ɤɧɨɩɤɢ ɚɧɚɥɨɝɢɱɧɵ
ɤɨɦɚɧɞɚɦ ɪɟɝɢɫɬɪɚɰɢɢ ɢ ɭɞɚɥɟɧɢɹ COM-ɫɟɪɜɟɪɨɜ ɜ ɫɢɫɬɟɦɟ.
ɇɢɠɟ ɫɩɢɫɤɚ COM-ɫɟɪɜɟɪɨɜ ɧɚɯɨɞɢɬɫɹ ɫɩɢɫɨɤ ɤɨɦɩɨɧɟɧɬɨɜ ɜ ɜɵ-
ɛɪɚɧɧɨɦ ɫɟɪɜɟɪɟ, ɚ ɬɚɤɠɟ ɫɬɪɨɤɚ ɫ ɜɵɛɨɪɨɦ ɞɢɪɟɤɬɨɪɢɢ, ɜ ɤɨɬɨɪɨɣ ɛɭɞɟɬ
ɫɨɯɪɚɧɟɧ ɷɤɫɩɨɪɬɢɪɭɟɦɵɣ ɦɨɞɭɥɶ.
ɑɬɨɛɵ ɩɨɥɭɱɢɬɶ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ, ɚɧɚɥɨɝɢɱɧɵɣ ɨɩɢɫɚɧɢɸ ɛɢɛɥɢɨ-
ɬɟɤɢ ɬɢɩɨɜ, ɧɭɠɧɨ ɧɚɠɚɬɶ ɧɚ ɤɧɨɩɤɭ Create Unit.
Ʉɧɨɩɤɚ Install… ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɝɟɧɟɪɢɪɭɟɬ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ ɤɨɦɩɨ-
ɧɟɧɬɚ Delphi, ɜ ɤɨɬɨɪɨɦ ɪɟɚɥɢɡɨɜɚɧɵ ɜɫɟ ɫɜɨɣɫɬɜɚ ɢ ɦɟɬɨɞɵ ɜɵɛɪɚɧɧɨɝɨ ɜ
ɫɩɢɫɤɟ ɤɨɦɩɨɧɟɧɬɚ. ɉɨɥɭɱɟɧɧɵɣ ɤɨɦɩɨɧɟɧɬ ɭɫɬɚɧɚɜɥɢɜɚɟɬɫɹ ɧɚ ɡɚɤɥɚɞɤɟ
Server. Ɋɚɛɨɬɚ ɫ ɬɚɤɢɦɢ ɤɨɦɩɨɧɟɧɬɚɦɢ ɬɪɢɜɢɚɥɶɧɚ ɢ ɚɧɚɥɨɝɢɱɧɚ, ɤɚɤ ɢ ɫɨ
ɜɫɟɦɢ ɫɬɚɧɞɚɪɬɧɵɦɢ ɤɨɦɩɨɧɟɧɬɚɦɢ Delphi, ɩɨɷɬɨɦɭ ɞɚɧɧɵɣ ɦɟɬɨɞ ɪɚɫ-
ɫɦɚɬɪɢɜɚɬɶɫɹ ɧɟ ɛɭɞɟɬ.
4.3. Ɉɫɨɛɟɧɧɨɫɬɢ ɬɟɯɧɢɤɢ ɢɫɩɨɥɶɡɨɜɚɧɢɹ
ɤɨɦɩɨɧɟɧɬɨɜ ɜ Delphi
Delphi ɹɜɥɹɟɬɫɹ ɬɚɤɨɣ ɫɪɟɞɨɣ ɪɚɡɪɚɛɨɬɤɢ ɩɪɨɝɪɚɦɦ, ɜ ɤɨɬɨɪɨɣ ɨɱɟɧɶ
ɦɧɨɝɨɟ ɚɜɬɨɦɚɬɢɡɢɪɨɜɚɧɨ ɢ ɭɩɪɨɳɟɧɨ. ɇɟ ɢɫɤɥɸɱɟɧɢɟɦ ɹɜɥɹɟɬɫɹ ɢ COM-
ɬɟɯɧɨɥɨɝɢɹ. ȼ Delphi ɪɚɡɪɚɛɨɬɚɧɵ ɤɥɚɫɫɵ, ɤɨɬɨɪɵɟ ɫɭɳɟɫɬɜɟɧɧɨ ɨɛɥɟɝ-
ɱɚɸɬ ɪɟɚɥɢɡɚɰɢɸ ɪɚɡɥɢɱɧɵɯ ɡɚɞɚɱ ɬɟɯɧɨɥɨɝɢɢ COM:
Ȼɚɡɨɜɵɣ ɤɥɚɫɫ
ɤɨɦɩɨɧɟɧɬɚ
ɂɫɩɨɥɶɡɭɟɬɫɹ ɞɥɹ
ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ
Ƚɟɧɟɪɚɬɨɪ ɤɨɦɩɨɧɟɧɬɨɜ
TAutoObject TAutoObjectFactory
ɤɨɦɩɨɧɟɧɬɨɜ
ɚɜɬɨɦɚɬɢɡɚɰɢɢ (ɝɥ. V)
TComObject TComObjectFactory ɩɪɨɫɬɵɯ ɤɨɦɩɨɧɟɧɬɨɜ
TTypedComObject TTypedComObjectFactory
ɤɨɦɩɨɧɟɧɬɨɜ ɫ ɝɟɧɟɪɚ-
ɰɢɟɣ ɛɢɛɥɢɨɬɟɤɢ ɬɢ-
ɩɨɜ
ȿɳɟ ɨɞɧɨɣ ɜɚɠɧɨɣ ɨɫɨɛɟɧɧɨɫɬɶɸ ɪɚɡɪɚɛɨɬɤɢ COM-ɩɪɢɥɨɠɟɧɢɣ ɹɜ-
ɥɹɟɬɫɹ ɬɨ, ɱɬɨ ɧɟɬ ɧɟɨɛɯɨɞɢɦɨɫɬɢ ɩɨɞɫɱɢɬɵɜɚɬɶ ɫɫɵɥɤɢ, ɬɨ ɟɫɬɶ ɢɫɩɨɥɶ-
ɡɨɜɚɬɶ ɦɟɬɨɞɵ _AddRef ɢ _Release, ɬɚɤ ɤɚɤ ɫɢɫɬɟɦɚ ɫɚɦɚ ɚɜɬɨɦɚɬɢɱɟɫɤɢ
ɭɜɟɥɢɱɢɬ ɫɱɟɬɱɢɤ, ɤɨɝɞɚ ɫɫɵɥɤɚ ɛɭɞɟɬ ɩɪɢɫɜɨɟɧɚ, ɢ ɭɦɟɧɶɲɢɬ, ɤɨɝɞɚ ɩɟ-
ɪɟɦɟɧɧɨɣ ɛɭɞɟɬ ɩɪɢɫɜɨɟɧɨ ɡɧɚɱɟɧɢɟ nil. Ʉɨɝɞɚ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɛɭɞɟɬ ɪɚ-
ɜɟɧ ɧɭɥɸ, ɨɛɴɟɤɬ ɛɭɞɟɬ ɭɧɢɱɬɨɠɟɧ:
V:=CreateComObject(GUID); //ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɭɜɟɥɢɱɢɥɫɹ ɢ ɪɚɜɟɧ 1
40
  4.2. ������� �������� ����������� �� ���������� �����                         ������ ����� ����������� ���� ��������� ������ ������������
                      COM-�������                                          COM-��������. �������� ����� COM-������ � ���� ������ ����� � ��-
                                                                           ����� ������ Add…, ������� – Remove. ������ ������ ����������
    � ������� ����� ��������� ���������� ���������� ����� � COM-           �������� ����������� � �������� COM-�������� � �������.
��������. ���������� ����� �������� � COM-������� � ���� �������, �             ���� ������ COM-�������� ��������� ������ ����������� � ��-
������ � �� ������ ����� �������� � ������� ����������� �������            ������� �������, � ����� ������ � ������� ����������, � ������� �����
WinAPI (��������� ��. [7 ��. 3]). ����� � Delphi ������������� ������      �������� �������������� ������.
����������� �������� ��� ��������� ������������ ���� �� ����� Object            ����� �������� ����������� ���, ����������� �������� ������-
Pascal, ���������������� �������� ���������� �����. ��� ����� �����        ���� �����, ����� ������ �� ������ Create Unit.
������� ���������� ���� Import Type Library (���. 4.1), ������ � �������        ������ Install… ������������� ���������� ����������� ��� �����-
���� ������� Project/Import Type Library….                                 ����� Delphi, � ������� ����������� ��� �������� � ������ ���������� �
                                                                           ������ ����������. ���������� ��������� ��������������� �� ��������
                                                                           Server. ������ � ������ ������������ ���������� � ����������, ��� � ��
                                                                           ����� ������������ ������������ Delphi, ������� ������ ����� ���-
                                                                           ������������ �� �����.

                                                                                      4.3. ����������� ������� �������������
                                                                                                ����������� � Delphi
                                                                               Delphi �������� ����� ������ ���������� ��������, � ������� �����
                                                                           ������ ���������������� � ��������. �� ����������� �������� � COM-
                                                                           ����������. � Delphi ����������� ������, ������� ����������� �����-
                                                                           ���� ���������� ��������� ����� ���������� COM:

                                                                             ������� �����                                    ������������ ���
                                                                                                 ��������� �����������
                                                                              ����������                                     �������������� …

                                                                                                                               �����������
                                                                              TAutoObject          TAutoObjectFactory
                                                                                                                           ������������� (��. V)
                                                                              TComObject           TComObjectFactory       ������� �����������
                                                                                                                           ����������� � ������-
                                                                           TTypedComObject      TTypedComObjectFactory      ���� ���������� ��-
                                                                                                                                    ���

                                                                                ��� ����� ������ ������������ ���������� COM-���������� ��-
                                                                           ������ ��, ��� ��� ������������� ������������ ������, �� ���� ������-
                                                                           ������ ������ _AddRef � _Release, ��� ��� ������� ���� �������������
                                                                           �������� �������, ����� ������ ����� ���������, � ��������, ����� ��-
                                                                           �������� ����� ��������� �������� nil. ����� ������� ������ ����� ��-
                                                                           ��� ����, ������ ����� ���������:
             ���. 4.1. ���������� ���� Import Type Library                     V:=CreateComObject(GUID); //������� ������ ���������� � ����� 1


                                   39                                                                        40