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

UptoLike

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

COM-ɫɟɪɜɟɪɚ ɢɡ ɩɚɦɹɬɢ. ȿɫɥɢ ɤɚɤɨɟ-ɥɢɛɨ ɩɪɢɥɨɠɟɧɢɟ ɢɦɟɟɬ ɫɫɵɥɤɭ ɧɚ
ɥɸɛɨɣ ɤɨɦɩɨɧɟɧɬ ɫɟɪɜɟɪɚ, ɬɨ ɮɭɧɤɰɢɹ ɜɟɪɧɟɬ S_FALSE, ɜ ɩɪɨɬɢɜɧɨɦ
ɫɥɭɱɚɟ – S_TRUE. ȼ ɩɨɫɥɟɞɧɟɦ ɫɥɭɱɚɟ ɦɟɯɚɧɢɡɦ ɪɟɚɥɢɡɚɰɢɢ COM ɭɞɚɥɢɬ
COM-ɫɟɪɜɟɪ ɢɡ ɩɚɦɹɬɢ.
2.3. Ɋɚɡɪɚɛɨɬɤɚ ɤɨɦɩɨɧɟɧɬɨɜ
Ʌɸɛɨɣ COM-ɫɟɪɜɟɪ (ɜɫɬɪɨɟɧɧɵɣ ɢɥɢ ɜɧɟɲɧɢɣ) ɧɟ ɢɦɟɟɬ ɤɚɤɨɝɨ-ɥɢɛɨ
ɫɦɵɫɥɚ, ɟɫɥɢ ɜ ɧɟɦ ɧɟ ɯɪɚɧɢɬɫɹ ɯɨɬɹ ɛɵ ɨɞɢɧ ɤɨɦɩɨɧɟɧɬ.
ɑɬɨɛɵ ɜ ɪɚɡɪɚɛɚɬɵɜɚɟɦɨɦ COM-ɫɟɪɜɟɪɟ ɫɨɡɞɚɬɶ ɧɨɜɵɣ ɤɨɦɩɨɧɟɧɬ,
ɧɚɞɨ ɜɵɛɪɚɬɶ ɜ ɝɥɚɜɧɨɦ ɦɟɧɸ Delphi ɩɭɧɤɬ File/New. Ɂɚɬɟɦ ɜ ɩɨɹɜɢɜɲɟɦ-
ɫɹ ɞɢɚɥɨɝɨɜɨɦ ɨɤɧɟ New Items (ɪɢɫ. 2.1) ɧɚ ɡɚɤɥɚɞɤɟ ActiveX ɜɵɛɪɚɬɶ
ɷɥɟɦɟɧɬ COM Object. ɉɨɫɥɟ ɱɟɝɨ ɨɬɤɪɨɟɬɫɹ ɨɤɧɨ ɦɚɫɬɟɪɚ COM Object
Wizard (ɪɢɫ. 2.2).
Ɋɢɫ. 2.2. Ɇɚɫɬɟɪ COM Object Wizard
ȼ ɩɨɥɟ Class Name ɜɜɨɞɢɬɫɹ ɢɦɹ ɤɥɚɫɫɚ. ɉɪɟɮɢɤɫ «T» ɤ ɧɚɡɜɚɧɢɸ
ɨɛɴɟɤɬɚ ɞɨɛɚɜɢɬɫɹ ɚɜɬɨɦɚɬɢɱɟɫɤɢ. ɇɚɡɜɚɧɢɟ ɨɛɴɟɤɬɚ ɧɟ ɞɨɥɠɧɨ ɛɵɬɶ
ɫɥɭɠɟɛɧɵɦ ɫɥɨɜɨɦ ɢ ɫɨɜɩɚɞɚɬɶ ɫ ɢɦɟɧɟɦ COM-ɫɟɪɜɟɪɚ ɢ ɩɪɢɫɨɟɞɢɧɟɧɧɨ-
ɝɨ ɦɨɞɭɥɹ.
ɉɨɥɟ Instancing ɨɩɪɟɞɟɥɹɟɬ ɦɟɬɨɞ ɫɨɡɞɚɧɢɹ ɷɤɡɟɦɩɥɹɪɚ ɤɨɦɩɨɧɟɧɬɚ
ɢ ɚɤɬɭɚɥɶɧɨ ɬɨɥɶɤɨ ɞɥɹ ɜɧɟɲɧɢɯ COM-ɫɟɪɜɟɪɨɜ:
17
Internal (ɜɧɭɬɪɟɧɧɢɣ) – ɢɫɩɨɥɶɡɭɟɬɫɹ ɬɨɥɶɤɨ ɞɥɹ ɤɨɦɩɨɧɟɧɬɨɜ, ɤɨ-
ɬɨɪɵɟ ɧɟ ɩɪɟɞɩɨɥɚɝɚɟɬɫɹ ɫɞɟɥɚɬɶ ɞɨɫɬɭɩɧɵɦɢ ɞɥɹ ɤɥɢɟɧɬɫɤɢɯ ɩɪɢɥɨɠɟ-
ɧɢɣ. Ɂɚɩɪɚɲɢɜɚɬɶ ɫɨɡɞɚɧɢɟ ɷɤɡɟɦɩɥɹɪɚ ɬɚɤɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɪɚɡɪɟɲɟɧɨ
ɬɨɥɶɤɨ ɫɨɛɫɬɜɟɧɧɨɦɭ COM-ɫɟɪɜɟɪɭ;
Single Instance (ɟɞɢɧɫɬɜɟɧɧɵɣ ɷɤɡɟɦɩɥɹɪ) – ɞɥɹ ɤɚɠɞɨɝɨ ɤɥɢɟɧɬ-
ɫɤɨɝɨ ɩɪɢɥɨɠɟɧɢɹ ɞɨɩɭɫɤɚɟɬɫɹ ɫɨɡɞɚɧɢɟ ɬɨɥɶɤɨ ɨɞɧɨɝɨ ɷɤɡɟɦɩɥɹɪɚ ɤɨɦ-
ɩɨɧɟɧɬɚ. ɉɪɢɥɨɠɟɧɢɟ, ɡɚɩɪɚɲɢɜɚɸɳɟɟ ɤɨɦɩɨɧɟɧɬ, ɛɭɞɟɬ ɪɚɛɨɬɚɬɶ ɫ ɫɨɛ-
ɫɬɜɟɧɧɨɣ ɨɬɞɟɥɶɧɨɣ ɤɨɩɢɟɣ COM-ɫɟɪɜɟɪɚ;
Multiple Instance (ɦɧɨɠɟɫɬɜɨ ɷɤɡɟɦɩɥɹɪɨɜ) – COM-ɫɟɪɜɟɪ ɫɩɨɫɨɛɟɧ
ɫɨɡɞɚɜɚɬɶ ɦɧɨɠɟɫɬɜɨ ɤɨɩɢɣ ɤɨɦɩɨɧɟɧɬɚ. ɉɪɢ ɡɚɩɪɨɫɟ ɧɨɜɨɝɨ ɷɤɡɟɦɩɥɹɪɚ
ɤɨɦɩɨɧɟɧɬɚ ɧɨɜɵɣ ɫɟɪɜɟɪ ɧɟ ɡɚɩɭɫɤɚɟɬɫɹ (ɟɫɥɢ ɨɧ ɭɠɟ ɡɚɩɭɳɟɧ ɪɚɧɟɟ), ɚ
ɫɨɡɞɚɟɬɫɹ ɧɨɜɵɣ ɷɤɡɟɦɩɥɹɪ COM-ɨɛɴɟɤɬɚ.
Threading model – ɨɩɪɟɞɟɥɹɟɬ ɬɢɩ ɩɨɞɞɟɪɠɢɜɚɟɦɨɣ ɦɨɞɟɥɢ ɩɨɬɨ-
ɤɨɜ ɡɚɞɚɱ. Ⱦɚɧɧɵɣ ɩɚɪɚɦɟɬɪ ɚɤɬɭɚɥɟɧ ɬɨɥɶɤɨ ɤ ɜɫɬɪɨɟɧɧɵɦ COM-
ɫɟɪɜɟɪɚɦ ɢ ɦɨɠɟɬ ɩɪɢɧɢɦɚɬɶ ɫɥɟɞɭɸɳɢɟ ɡɧɚɱɟɧɢɹ:
Single (ɨɞɧɨɩɨɬɨɤɨɜɚɹ) – ɜɫɟ ɡɚɹɜɤɢ ɧɚ ɞɨɫɬɭɩ ɤ ɤɨɦɩɨɧɟɧɬɭ ɜɵ-
ɫɬɪɚɢɜɚɸɬɫɹ ɨɩɟɪɚɰɢɨɧɧɨɣ ɫɢɫɬɟɦɨɣ Windows ɜ ɨɱɟɪɟɞɶ, ɬɚɤ ɱɬɨ ɧɟɬ ɧɟ-
ɨɛɯɨɞɢɦɨɫɬɢ ɛɟɫɩɨɤɨɢɬɶɫɹ ɨ ɬɨɦ, ɱɬɨ ɧɟɫɤɨɥɶɤɨ ɩɨɬɨɤɨɜ ɦɨɝɭɬ ɨɞɧɨɜɪɟ-
ɦɟɧɧɨ ɢɦɟɬɶ ɞɨɫɬɭɩ ɤ ɫɟɪɜɟɪɭ;
Apartment (ɫɟɤɰɢɨɧɢɪɨɜɚɧɧɚɹ) – ɤɨɦɩɨɧɟɧɬɵ ɨɛɪɚɛɚɬɵɜɚɸɬ ɡɚɩɪɨ-
ɫɵ ɬɨɥɶɤɨ ɢɡ ɬɨɝɨ ɠɟ ɩɨɬɨɤɚ, ɤɨɬɨɪɵɣ ɢɯ ɩɨɪɨɞɢɥ. Ɉɞɢɧ ɫɟɪɜɟɪ ɦɨɠɟɬ
ɷɤɫɩɨɪɬɢɪɨɜɚɬɶ ɦɧɨɠɟɫɬɜɨ COM-ɨɛɴɟɤɬɨɜ, ɩɪɢɱɟɦ ɤɚɠɞɵɣ ɢɡ ɧɢɯ ɦɨɠɟɬ
ɛɵɬɶ ɫɨɡɞɚɧ ɜ ɞɪɭɝɨɦ ɩɨɬɨɤɟ, ɩɨɷɬɨɦɭ ɬɪɟɛɭɟɬɫɹ ɫɢɧɯɪɨɧɢɡɚɰɢɹ ɞɨɫɬɭɩɚ ɤ
ɥɸɛɵɦ ɝɥɨɛɚɥɶɧɵɦ ɞɚɧɧɵɦ, ɤɨɬɨɪɵɟ ɨɩɪɟɞɟɥɟɧɵ ɜ ɫɟɪɜɟɪɟ ɩɨɫɪɟɞɫɬɜɨɦ
ɦɶɸɬɟɤɫɨɜ,
ɫɨɛɵɬɢɣ, ɤɪɢɬɢɱɟɫɤɢɯ ɫɟɤɰɢɣ ɢɬ. ɩ.
Free (ɫɜɨɛɨɞɧɚɹ) – ɦɧɨɠɟɫɬɜɨ ɩɨɬɨɤɨɜ ɦɨɠɟɬ ɛɵɬɶ ɚɤɬɢɜɧɨ ɜ ɥɸ-
ɛɨɦ ɞɚɧɧɨɦ ɤɨɦɩɨɧɟɧɬɟ ɜ ɨɞɧɨ ɢ ɬɨ ɠɟ ɜɪɟɦɹ. ȼɫɥɟɞɫɬɜɢɟ ɷɬɨɝɨ ɧɭɠɧɨ
ɩɨɡɚɛɨɬɢɬɶɫɹ ɨ ɫɢɧɯɪɨɧɢɡɚɰɢɢ ɞɨɫɬɭɩɚ ɧɟ ɬɨɥɶɤɨ ɤ ɝɥɨɛɚɥɶɧɵɦ ɞɚɧɧɵɦ,
ɧɨ ɢ ɤ ɥɨɤɚɥɶɧɵɦ;
Both (ɢ ɫɟɤɰɢɨɧɧɚɹ ɢ ɫɜɨɛɨɞɧɚɹ) – ɤɨɦɩɨɧɟɧɬ ɞɨɥɠɟɧ ɫɢɧɯɪɨɧɢɡɢ-
ɪɨɜɚɬɶ ɫɜɨɣ ɫɨɛɫɬɜɟɧɧɵɣ ɞɨɫɬɭɩ ɤ ɷɤɡɟɦɩɥɹɪɚɦ ɤɨɦɩɨɧɟɧɬɨɜ, ɧɚɫɬɪɨɟɧ-
ɧɵɯ ɧɚ ɫɟɤɰɢɨɧɢɪɨɜɚɧɧɭɸ ɦɨɞɟɥɶ, ɢ ɜɵɩɨɥɧɹɬɶ ɦɚɪɲɪɭɬɢɡɚɰɢɸ ɩɚɪɚ-
ɦɟɬɪɨɜ ɦɟɠɞɭ ɩɨɬɨɤɚɦɢ;
ȼ ɩɨɥɟ Implemented interfaces ɱɟɪɟɡ ɡɚɩɹɬɭɸ ɜɜɨɞɹɬɫɹ ɧɚɡɜɚɧɢɹ ɢɧ-
ɬɟɪɮɟɣɫɨɜ, ɤɨɬɨɪɵɟ ɛɭɞɟɬ ɩɨɞɞɟɪɠɢɜɚɬɶ ɤɨɦɩɨɧɟɧɬ.
ɉɨɥɟ Description ɩɪɟɞɧɚɡɧɚɱɟɧɨ ɞɥɹ ɜɜɨɞɚ ɡɚɦɟɱɚɧɢɣ ɢɥɢ ɫɬɪɨɤɢ-
ɨɩɢɫɚɧɢɹ ɨɛɴɟɤɬɚ.
Ʉɨɝɞɚ ɜɵɛɢɪɚɟɬɫɹ ɨɩɰɢɹ Include Type Library, ɤ ɨɩɢɫɚɧɢɸ Ʉɨɦɩɨɧɟɧ-
ɬɚ ɩɨɞɤɥɸɱɚɟɬɫɹ ɛɢɛɥɢɨɬɟɤɚ ɬɢɩɨɜ. Ȼɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɪɚɡɨɛɪɚɧɵ ɜ ɬɪɟɬɶ-
ɟɣ ɝɥɚɜɟ.
Ʉɨɦɩɨɧɟɧɬɵ ɜ Delphi ɨɩɢɫɵɜɚɸɬɫɹ ɬɚɤ ɠɟ, ɤɚɤ ɢ ɤɥɚɫɫɵ ɨɛɴɟɤɬɨɜ:
18
COM-������� �� ������. ���� �����-���� ���������� ����� ������ ��              Internal (����������) – ������������ ������ ��� �����������, ��-
����� ��������� �������, �� ������� ������ S_FALSE, � ���������         ����� �� �������������� ������� ���������� ��� ���������� �������-
������ – S_TRUE. � ��������� ������ �������� ���������� COM ������      ���. ����������� �������� ���������� ������ ���������� ���������
COM-������ �� ������.                                                   ������ ������������ COM-�������;
                                                                               Single Instance (������������ ���������) – ��� ������� ������-
                                                                        ����� ���������� ����������� �������� ������ ������ ���������� ���-
                  2.3. ���������� �����������                           �������. ����������, ������������� ���������, ����� �������� � ���-
                                                                        �������� ��������� ������ COM-�������;
    ����� COM-������ (���������� ��� �������) �� ����� ������-����             Multiple Instance (��������� �����������) – COM-������ ��������
������, ���� � ��� �� �������� ���� �� ���� ���������.                  ��������� ��������� ����� ����������. ��� ������� ������ ����������
    ����� � ��������������� COM-������� ������� ����� ���������,        ���������� ����� ������ �� ����������� (���� �� ��� ������� �����), �
���� ������� � ������� ���� Delphi ����� File/New. ����� � ���������-   ��������� ����� ��������� COM-�������.
�� ���������� ���� New Items (���. 2.1) �� �������� ActiveX �������            Threading model – ���������� ��� �������������� ������ ����-
������� COM Object. ����� ���� ��������� ���� ������� COM Object        ��� �����. ������ �������� �������� ������ � ���������� COM-
Wizard (���. 2.2).                                                      �������� � ����� ��������� ��������� ��������:
                                                                               Single (�������������) – ��� ������ �� ������ � ���������� ��-
                                                                        ����������� ������������ �������� Windows � �������, ��� ��� ��� ��-
                                                                        ����������� ������������ � ���, ��� ��������� ������� ����� �������-
                                                                        ����� ����� ������ � �������;
                                                                               Apartment (����������������) – ���������� ������������ �����-
                                                                        �� ������ �� ���� �� ������, ������� �� �������. ���� ������ �����
                                                                        �������������� ��������� COM-��������, ������ ������ �� ��� �����
                                                                        ���� ������ � ������ ������, ������� ��������� ������������� ������� �
                                                                        ����� ���������� ������, ������� ���������� � ������� �����������
                                                                        ���������, �������, ����������� ������ � �. �.
                                                                               Free (���������) – ��������� ������� ����� ���� ������� � ��-
                                                                        ��� ������ ���������� � ���� � �� �� �����. ���������� ����� �����
                                                                        ������������ � ������������� ������� �� ������ � ���������� ������,
                                                                        �� � � ���������;
                                                                               Both (� ���������� � ���������) – ��������� ������ ����������-
                                                                        ������ ���� ����������� ������ � ����������� �����������, ��������-
                                                                        ��� �� ���������������� ������, � ��������� ������������� ����-
                                                                        ������ ����� ��������;

                 ���. 2.2. ������ COM Object Wizard                          � ���� Implemented interfaces ����� ������� �������� �������� ��-
                                                                        ���������, ������� ����� ������������ ���������.
    � ���� Class Name �������� ��� ������. ������� «T» � ��������            ���� Description ������������� ��� ����� ��������� ��� ������-
������� ��������� �������������. �������� ������� �� ������ ����        �������� �������.
��������� ������ � ��������� � ������ COM-������� � �������������-           ����� ���������� ����� Include Type Library, � �������� ��������-
�� ������.                                                              �� ������������ ���������� �����. ���������� ����� ��������� � �����-
    ���� Instancing ���������� ����� �������� ���������� ����������     �� �����.
� ��������� ������ ��� ������� COM-��������:                                 ���������� � Delphi ����������� ��� ��, ��� � ������ ��������:

                                 17                                                                       18