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

UptoLike

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

<ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>=class(<ɢɦɹ ɨɛɴɟɤɬɚ-ɪɨɞɢɬɟɥɹ>
{,<ɢɧɬɟɪɮɟɣɫ})
private
<……………………………>
protected
<ɦɟɬɨɞɵ ɢɧɬɟɪɮɟɣɫɨɜ>
<……………………………>
public
<……………………………>
end;
Ⱦɥɹ ɛɵɫɬɪɨɝɨ ɩɨɫɬɪɨɟɧɢɹ COM-ɩɪɢɥɨɠɟɧɢɣ ɪɚɡɪɚɛɨɬɱɢɤɢ Delphi
ɩɨɦɟɫɬɢɥɢ ɜ ɦɨɞɭɥɶ ComObj ɤɥɚɫɫɵ, ɜ ɤɨɬɨɪɵɯ ɪɟɚɥɢɡɨɜɚɧɵ ɜɫɟ ɫɬɚɧ-
ɞɚɪɬɧɵɟ ɬɪɟɛɨɜɚɧɢɹ ɞɥɹ COM. Ɍɚɤ, ɧɚɩɪɢɦɟɪ, ɟɫɬɶ ɤɥɚɫɫ TComObject, ɜ
ɤɨɬɨɪɨɦ ɪɟɚɥɢɡɨɜɚɧɵ ɜɫɟ ɦɟɬɨɞɵ ɢɧɬɟɪɮɟɣɫɚ IUnknown.
ɉɪɢɦɟɱɚɧɢɟ 2.4. ɉɪɢ ɪɟɚɥɢɡɚɰɢɢ COM-ɩɪɢɥɨɠɟɧɢɣ ɜɫɟɝɞɚ ɩɨɥɶɡɭɣ-
ɬɟɫɶ ɲɚɛɥɨɧɚɦɢ, ɩɪɟɞɥɨɠɟɧɧɵɦɢ ɜ ɡɚɤɥɚɞɤɟ ActiveX ɞɢɚɥɨɝɨɜɨɝɨ ɨɤɧɚ
New Items (ɪɢɫ. 2.1). Ⱦɥɹ ɤɚɠɞɨɝɨ ɬɢɩɚ ɡɚɞɚɱ, ɨɫɧɨɜɚɧɧɵɯ ɧɚ COM, ɜ Del-
phi ɪɟɚɥɢɡɨɜɚɧɵ ɫɜɨɢ ɤɥɚɫɫɵ, ɩɪɢɦɟɧɟɧɢɟ ɤɨɬɨɪɵɯ ɫɭɳɟɫɬɜɟɧɧɨ ɨɛɥɟɝɱɚ-
ɟɬ ɪɚɛɨɬɭ ɢ ɝɚɪɚɧɬɢɪɭɟɬ ɤɨɪɪɟɤɬɧɨɫɬɶ ɪɚɛɨɬɵ ɜɚɲɟɝɨ ɩɪɨɟɤɬɚ.
ɂɧɬɟɪɮɟɣɫɵ, ɩɨɞɞɟɪɠɢɜɚɟɦɵɟ ɤɨɦɩɨɧɟɧɬɨɦ, ɨɩɢɫɵɜɚɸɬɫɹ ɱɟɪɟɡ ɡɚ-
ɩɹɬɭɸ ɜ ɪɚɡɞɟɥɟ ɨɩɢɫɚɧɢɹ ɤɥɚɫɫɚ-ɩɪɟɞɤɚ, ɚ ɦɟɬɨɞɵ ɢɧɬɟɪɮɟɣɫɚ ɨɛɵɱɧɨ
ɨɩɢɫɵɜɚɸɬɫɹ ɜ ɪɚɡɞɟɥɟ ɨɩɢɫɚɧɢɹ protected.
ɉɪɢɦɟɱɚɧɢɟ 2.5.
ȿɫɥɢ ɧɭɠɧɨ ɢɧɢɰɢɚɥɢɡɢɪɨɜɚɬɶ ɤɚɤɢɟ-ɥɢɛɨ ɞɚɧɧɵɟ
ɜɨ ɜɪɟɦɹ ɫɨɡɞɚɧɢɹ ɤɨɦɩɨɧɟɧɬɚ, ɬɨ ɞɥɹ ɷɬɢɯ ɰɟɥɟɣ ɢɫɩɨɥɶɡɭɣɬɟ ɦɟɬɨɞ Ini-
tialize, ɤɨɬɨɪɵɣ ɜɵɡɵɜɚɟɬɫɹ ɩɨɫɥɟ ɪɚɛɨɬɵ ɤɨɧɫɬɪɭɤɬɨɪɚ.
2.4. Ɋɚɡɪɟɲɟɧɢɟ ɧɟɨɞɧɨɡɧɚɱɧɨɫɬɢ ɦɟɬɨɞɨɜ
Ʉɚɤ ɭɠɟ ɛɵɥɨ ɧɟɨɞɧɨɤɪɚɬɧɨ ɫɤɚɡɚɧɨ, ɤɨɦɩɨɧɟɧɬ ɦɨɠɟɬ ɩɨɞɞɟɪɠɢ-
ɜɚɬɶ ɧɟɫɤɨɥɶɤɨ ɢɧɬɟɪɮɟɣɫɨɜ. ȿɫɥɢ ɦɟɬɨɞɵ ɪɚɡɧɵɯ ɢɧɬɟɪɮɟɣɫɨɜ ɫ ɨɞɢɧɚ-
ɤɨɜɵɦɢ ɢɦɟɧɚɦɢ ɜɵɩɨɥɧɹɸɬ ɨɞɢɧɚɤɨɜɵɟ ɮɭɧɤɰɢɢ, ɩɪɨɛɥɟɦ ɧɟ ɜɨɡɧɢɤɚɟɬ,
ɚ ɤɨɝɞɚ ɬɪɟɛɭɟɬɫɹ, ɱɬɨɛɵ ɨɧɢ ɜɵɩɨɥɧɹɥɢ ɪɚɡɧɵɟ ɮɭɧɤɰɢɢ, ɢɫɩɨɥɶɡɭɟɬɫɹ
ɫɩɟɰɢɚɥɶɧɚɹ ɮɨɪɦɚ ɜɵɪɚɠɟɧɢɹ ɞɥɹ ɪɚɡɪɟɲɟɧɢɹ ɦɟɬɨɞɨɜ, ɩɪɢɦɟɪ ɪɟɚɥɢ-
ɡɚɰɢɢ ɤɨɬɨɪɵɯ ɩɪɢɜɟɞɟɧ ɜ ɫɥɟɞɭɸɳɟɦ ɩɪɢɦɟɪɟ:
IInterface1=interface
procedure DoIt; stdcall;
end;
19
IInterface2=interface
procedure DoIt; stdcall;
end;
TMyObject=class(TComObject, IInterface1, IInteface2)
procedure IInterface1.DoIt=DoIt1;
procedure IInterface2.DoIt=DoIt2;
procedure DoIt1; stdcall;
procedure DoIt2; stdcall;
end;
Ʉɥɚɫɫ TMyObject ɨɬɨɛɪɚɠɚɟɬ ɦɟɬɨɞ IInterface1.DoIt ɧɚ DoIt1, ɚ ɦɟɬɨɞ
IInterface2.DoIt – ɧɚ DoIt2.
2.5. Ⱦɟɥɟɝɢɪɨɜɚɧɢɟ ɢɧɬɟɪɮɟɣɫɚ
ɉɭɫɬɶ ɢɦɟɟɬɫɹ ɯɨɪɨɲɨ ɩɪɨɞɭɦɚɧɧɵɣ ɤɥɚɫɫ TObject1, ɜ ɤɨɬɨɪɨɦ ɪɟɚ-
ɥɢɡɨɜɚɧ ɢɧɬɟɪɮɟɣɫ IInterfase1. Ɍɪɟɛɭɟɬɫɹ ɫɨɡɞɚɬɶ ɤɥɚɫɫ TCombinedObject,
ɜ ɤɨɬɨɪɨɦ ɛɭɞɭɬ ɪɟɚɥɢɡɨɜɚɧɵ ɞɜɚ ɢɧɬɟɪɮɟɣɫɚ IInterfase1 ɢ IInterfase2. Ⱦɥɹ
ɷɬɢɯ ɰɟɥɟɣ ɜ ɫɪɟɞɟ Delphi ɪɚɡɪɚɛɨɬɚɧ ɦɟɬɨɞ ɞɟɥɟɝɢɪɨɜɚɧɢɹ ɢɧɬɟɪɮɟɣɫɚ,
ɨɫɧɨɜɚɧɧɵɣ ɧɚ ɬɨɦ, ɱɬɨ ɤɥɚɫɫ-ɩɪɟɟɦɧɢɤ ɫɨɞɟɪɠɢɬ ɭɤɚɡɚɬɟɥɶ ɧɚ ɞɪɭɝɨɣ
ɤɥɚɫɫ, ɜ ɤɨɬɨɪɨɦ ɭɠɟ ɪɟɚɥɢɡɨɜɚɧɨ ɩɨɜɟɞɟɧɢɟ ɨɞɧɨɝɨ ɢɥɢ ɛɨɥɟɟ ɢɧɬɟɪɮɟɣ-
ɫɨɜ. Ʉɚɤ ɦɨɠɧɨ ɨɫɭɳɟɫɬɜɢɬɶ ɞɟɥɟɝɢɪɨɜɚɧɢɟ, ɩɨɤɚɡɚɧɨ ɜ ɫɥɟɞɭɸɳɟɦ ɩɪɢ-
ɦɟɪɟ:
unit Unit1;
uses ComObj;
type
IInterface1=interface
procedure DoIt1;
end;
IInterface2=interface
procedure DoIt2;
end;
TObject1=class(TComObject, IInterface1)
protected
procedure DoIt1;
end;
TCombinedObject=class(TComObject, IInterface1, IInterface2)
private
20
        <��� ����������>=class(<��� �������-��������>                         IInterface2=interface
        {,<���������})                                                             procedure DoIt; stdcall;
        private                                                               end;
                          <……………………………>                                       TMyObject=class(TComObject, IInterface1, IInteface2)
        protected                                                                procedure IInterface1.DoIt=DoIt1;
                                                                                 procedure IInterface2.DoIt=DoIt2;
                          <������ �����������>
                          <……………………………>                                              procedure DoIt1; stdcall;
                                                                                     procedure DoIt2; stdcall;
        public                                                                end;
                          <……………………………>
                                                                              ����� TMyObject ���������� ����� IInterface1.DoIt �� DoIt1, � �����
        end;                                                                  IInterface2.DoIt – �� DoIt2.
    ��� �������� ���������� COM-���������� ������������ Delphi
��������� � ������ ComObj ������, � ������� ����������� ��� ����-                            2.5. ������������� ����������
������� ���������� ��� COM. ���, ��������, ���� ����� TComObject, �
������� ����������� ��� ������ ���������� IUnknown.                            ����� ������� ������ ����������� ����� TObject1, � ������� ���-
                                                                          ������� ��������� IInterfase1. ��������� ������� ����� TCombinedObject,
     ���������� 2.4. ��� ���������� COM-���������� ������ �������-        � ������� ����� ����������� ��� ���������� IInterfase1 � IInterfase2. ���
���� ���������, ������������� � �������� ActiveX ����������� ����         ���� ����� � ����� Delphi ���������� ����� ������������� ����������,
New Items (���. 2.1). ��� ������� ���� �����, ���������� �� COM, � Del-   ���������� �� ���, ��� �����-�������� �������� ��������� �� ������
phi ����������� ���� ������, ���������� ������� ����������� �������-      �����, � ������� ��� ����������� ��������� ������ ��� ����� ��������-
�� ������ � ����������� ������������ ������ ������ �������.               ���. ��� ����� ����������� �������������, �������� � ��������� ���-
    ����������, �������������� �����������, ����������� ����� ��-         ����:
����� � ������� �������� ������-������, � ������ ���������� ������            unit Unit1;
����������� � ������� �������� protected.
                                                                              uses ComObj;
      ���������� 2.5. ���� ����� ���������������� �����-���� ������
�� ����� �������� ����������, �� ��� ���� ����� ����������� ����� Ini-        type
tialize, ������� ���������� ����� ������ ������������.                               IInterface1=interface
                                                                                          procedure DoIt1;
                                                                                     end;
           2.4. ���������� ��������������� �������
                                                                                     IInterface2=interface
     ��� ��� ���� ������������ �������, ��������� ����� ��������-                         procedure DoIt2;
���� ��������� �����������. ���� ������ ������ ����������� � �����-                  end;
������ ������� ��������� ���������� �������, ������� �� ���������,
� ����� ���������, ����� ��� ��������� ������ �������, ������������                  TObject1=class(TComObject, IInterface1)
����������� ����� ��������� ��� ���������� �������, ������ �����-                    protected
����� ������� �������� � ��������� �������:                                               procedure DoIt1;
                                                                                     end;
    IInterface1=interface
         procedure DoIt; stdcall;                                                    TCombinedObject=class(TComObject, IInterface1, IInterface2)
    end;                                                                             private

                                    19                                                                           20