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

UptoLike

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

Ʉɥɢɟɧɬ ɢ ɫɟɪɜɟɪ ɞɨɥɠɧɵ ɫɨɞɟɪɠɚɬɶ ɨɞɢɧɚɤɨɜɨɟ ɨɩɢɫɚɧɢɟ ɢɧɬɟɪɮɟɣ-
ɫɨɜ. ɉɨɷɬɨɦɭ ɢɧɬɟɪɮɟɣɫ ɥɭɱɲɟ ɨɩɢɫɚɬɶ ɜ ɨɬɞɟɥɶɧɨɦ ɦɨɞɭɥɟ, ɤɨɬɨɪɵɣ
ɩɪɢɫɨɟɞɢɧɹɟɬɫɹ ɤ ɤɥɢɟɧɬɭ ɢ ɤ ɫɟɪɜɟɪɭ.
ɉɪɢɜɟɞɟɦ ɩɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ ɢɧɬɟɪɮɟɣɫɚ. ȼ ɞɚɧɧɨɦ ɩɪɢɦɟɪɟ ɨɩɢɫɚɧ
ɢɧɬɟɪɮɟɣɫ, ɫɨɞɟɪɠɚɳɢɣ ɬɪɢ ɮɭɧɤɰɢɢ ɩɟɪɟɜɨɞɚ ɰɟɥɨɝɨ ɱɢɫɥɚ ɜ ɞɜɨɢɱɧɵɣ,
ɜɨɫɶɦɟɪɢɱɧɵɣ ɢ ɲɟɫɬɧɚɞɰɚɬɟɪɢɱɧɵɣ ɜɢɞ, ɤɨɬɨɪɵɣ ɛɭɞɟɬ ɜɵɜɨɞɢɬɶɫɹ ɜ
ɜɢɞɟ ɫɬɪɨɤɢ.
1. Ɂɚɩɭɫɬɢɦ Delphi ɢ ɨɬɤɪɨɟɦ ɧɨɜɵɣ ɦɨɞɭɥɶ, ɜɵɛɪɚɜ ɜ ɦɟɧɸ
File/New. ȼ ɩɨɹɜɢɜɲɟɦɫɹ ɞɢɚɥɨɝɨɜɨɦ ɨɤɧɟ New Items ɧɚ ɡɚɤɥɚɞɤɟ
New ɜɵɛɟɪɟɦ ɷɥɟɦɟɧɬ Unit.
2. ɋɨɯɪɚɧɢɦ ɧɨɜɵɣ ɦɨɞɭɥɶ ɤɚɤ ConvertInterface.pas ɢ ɜ ɧɟɝɨ ɩɨɦɟɫ-
ɬɢɦ ɫɥɟɞɭɸɳɢɣ ɬɟɤɫɬ:
unit ConvertInterface;
interface
type
IConvert=interface
['{F1E9A4BA-4C4A-11D5-8D36-006008159451}']
function Bin (const n: Word; var Str: WideString): Boolean;
stdcall;
function Oct(const n: Word; var Str: WideString): Boolean;
stdcall;
function Hex(const n: Word; var Str: WideString): Boolean;
stdcall;
end;
implementation
end.
2.2. Ɋɟɚɥɢɡɚɰɢɹ ɜɫɬɪɨɟɧɧɨɝɨ COM-ɫɟɪɜɟɪɚ
ȼɫɬɪɨɟɧɧɵɟ COM-ɫɟɪɜɟɪɵ ɪɟɚɥɢɡɨɜɚɧɵ ɜɧɭɬɪɢ ɦɨɞɭɥɟɣ DLL, ɩɨ-
ɷɬɨɦɭ ɨɧɢ ɜɵɩɨɥɧɹɸɬɫɹ ɜ ɩɪɨɰɟɫɫɟ ɩɪɢɥɨɠɟɧɢɹ, ɤɨɬɨɪɨɟ ɢɯ ɢɫɩɨɥɶɡɭɟɬ.
ȼɫɥɟɞɫɬɜɢɟ ɞɚɧɧɨɝɨ ɫɜɨɣɫɬɜɚ ɨɧɢ ɢ ɩɨɥɭɱɢɥɢ ɫɜɨɟ ɧɚɡɜɚɧɢɟ.
Ⱦɥɹ ɬɨɝɨ, ɱɬɨɛɵ ɫɨɡɞɚɬɶ ɜɫɬɪɨɟɧɧɵɣ COM-ɫɟɪɜɟɪ ɜ ɫɪɟɞɟ Delphi, ɧɟ-
ɨɛɯɨɞɢɦɨ ɜ ɝɥɚɜɧɨɦ ɦɟɧɸ ɜɵɛɪɚɬɶ File/New. ȼ ɩɨɹɜɢɜɲɟɦɫɹ ɞɢɚɥɨɝɨɜɨɦ
ɨɤɧɟ New Items ɨɬɤɪɵɬɶ ɡɚɤɥɚɞɤɭ ActiveX (ɪɢɫ. 2.1) ɢ ɜɵɛɪɚɬɶ ɷɥɟɦɟɧɬ
ActiveX Library.
15
Ɋɢɫ. 2.1. Ⱦɢɚɥɨɝɨɜɨɟ ɨɤɧɨ New Items ɧɚ ɡɚɤɥɚɞɤɟ ActiveX
ȼ ɛɢɛɥɢɨɬɟɤɭ ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɩɪɨɩɢɫɵɜɚɸɬɫɹ ɱɟɬɵɪɟ ɷɤɫɩɨɪɬɢɪɭɟ-
ɦɵɟ ɮɭɧɤɰɢɢ, ɪɟɚɥɢɡɨɜɚɧɧɵɟ ɜ ɦɨɞɭɥɟ ComServ:
function DllRegisterServer: HResult; stdcall; – ɢɫɩɨɥɶɡɭɟɬɫɹ ɞɥɹ ɪɟɝɢ-
ɫɬɪɚɰɢɢ COM-ɫɟɪɜɟɪɚ ɜ ɫɢɫɬɟɦɧɨɦ ɪɟɟɫɬɪɟ. ȿɫɥɢ ɪɟɝɢɫɬɪɚɰɢɹ ɩɪɨɲɥɚ ɭɫ-
ɩɟɲɧɨ, ɮɭɧɤɰɢɹ ɜɨɡɜɪɚɳɚɟɬ ɡɧɚɱɟɧɢɟ S_OK, ɢɧɚɱɟ S_FAIL.
function DllUnregisterServer: HResult; stdcall; – ɨɛɪɚɬɧɚɹ ɮɭɧɤɰɢɹ ɤ
DllRegisterServer: ɭɞɚɥɹɟɬ ɢɡ ɪɟɟɫɬɪɚ Windows ɜɫɟ ɷɥɟɦɟɧɬɵ, ɤɚɫɚɸɳɢɟɫɹ
ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɤɨɦɩɨɧɟɧɬɚ. ȿɫɥɢ ɮɭɧɤɰɢɹ ɨɬɪɚɛɨɬɚɥɚ ɭɫɩɟɲɧɨ, ɬɨ
ɜɨɡɜɪɚɳɚɟɬɫɹ ɡɧɚɱɟɧɢɟ S_OK, ɢɧɚɱɟ S_FAIL.
function DllGetClassObject(const CLSID, IID: TGUID; var Obj):
HResult; stdcall; – ɋɨɡɞɚɟɬ ɧɨɜɵɣ ɤɨɦɩɨɧɟɧɬ ɫ ɧɨɦɟɪɨɦ CLSID ɢ ɜɵɞɚɟɬ
ɫɫɵɥɤɭ ɧɚ ɢɧɬɟɪɮɟɣɫ ɫ ɧɨɦɟɪɨɦ IID ɱɟɪɟɡ ɩɚɪɚɦɟɬɪ Obj. ȼɵɡɵɜɚɟɬɫɹ ɫɢɫ-
ɬɟɦɨɣ, ɪɟɚɥɢɡɭɸɳɟɣ ɚɪɯɢɬɟɤɬɭɪɭ COM. ȼ ɫɥɭɱɚɟ ɭɫɩɟɲɧɨɝɨ ɜɵɩɨɥɧɟɧɢɹ
ɮɭɧɤɰɢɹ ɜɨɡɜɪɚɳɚɟɬ ɡɧɚɱɟɧɢɟ: S_OK ɢɧɚɱɟ: E_NOINTERFACE – ɟɫɥɢ
ɢɧɬɟɪɮɟɣɫ ɧɟ ɧɚɣɞɟɧ ɢ CLASS_E_CLASSNOTAVAILABLE – ɤɨɦɩɨɧɟɧɬ
ɫ ɬɚɤɢɦ ɧɨɦɟɪɨɦ ɧɟ ɡɚɪɟɝɢɫɬɪɢɪɨɜɚɧ ɜ ɫɢɫɬɟɦɟ.
function DllCanUnloadNow: HResult; stdcall; – ɜɵɡɵɜɚɟɬɫɹ ɦɟɯɚɧɢɡ-
ɦɨɦ ɪɟɚɥɢɡɚɰɢɢ COM ɞɥɹ ɩɪɨɜɟɪɤɢ, ɜɵɩɨɥɧɹɸɬɫɹ ɥɢ ɭɫɥɨɜɢɹ ɭɞɚɥɟɧɢɹ
16
     ������ � ������ ������ ��������� ���������� �������� ��������-
���. ������� ��������� ����� ������� � ��������� ������, �������
�������������� � ������� � � �������.
     �������� ������ ���������� ����������. � ������ ������� ������
���������, ���������� ��� ������� �������� ������ ����� � ��������,
������������ � ����������������� ���, ������� ����� ���������� �
���� ������.
    1. �������� Delphi � ������� ����� ������, ������ � ����
       File/New. � ����������� ���������� ���� New Items �� ��������
       New ������� ������� Unit.
    2. �������� ����� ������ ��� ConvertInterface.pas � � ���� �����-
       ��� ��������� �����:
       unit ConvertInterface;
       interface
       type
         IConvert=interface
            ['{F1E9A4BA-4C4A-11D5-8D36-006008159451}']
            function Bin (const n: Word; var Str: WideString): Boolean;
            stdcall;
            function Oct(const n: Word; var Str: WideString): Boolean;
            stdcall;
                                                                                  ���. 2.1. ���������� ���� New Items �� �������� ActiveX
            function Hex(const n: Word; var Str: WideString): Boolean;
            stdcall;                                                          � ���������� ������������� ������������� ������ �����������-
         end;                                                             ��� �������, ������������� � ������ ComServ:
       implementation                                                          function DllRegisterServer: HResult; stdcall; – ������������ ��� ����-
       end.                                                               ������� COM-������� � ��������� �������. ���� ����������� ������ ��-
                                                                          �����, ������� ���������� �������� S_OK, ����� S_FAIL.
                                                                               function DllUnregisterServer: HResult; stdcall; – �������� ������� �
                                                                          DllRegisterServer: ������� �� ������� Windows ��� ��������, ����������
          2.2. ���������� ����������� COM-�������                         ���������������� ����������. ���� ������� ���������� �������, ��
                                                                          ������������ �������� S_OK, ����� S_FAIL.
    ���������� COM-������� ����������� ������ ������� DLL, ��-                 function DllGetClassObject(const CLSID, IID: TGUID; var Obj):
����� ��� ����������� � �������� ����������, ������� �� ����������.       HResult; stdcall; – ������� ����� ��������� � ������� CLSID � ������
���������� ������� �������� ��� � �������� ���� ��������.                 ������ �� ��������� � ������� IID ����� �������� Obj. ���������� ���-
    ��� ����, ����� ������� ���������� COM-������ � ����� Delphi, ��-     �����, ����������� ����������� COM. � ������ ��������� ����������
�������� � ������� ���� ������� File/New. � ����������� ����������        ������� ���������� ��������: S_OK �����: E_NOINTERFACE – ����
���� New Items ������� �������� ActiveX (���. 2.1) � ������� �������      ��������� �� ������ � CLASS_E_CLASSNOTAVAILABLE – ���������
ActiveX Library.                                                          � ����� ������� �� ��������������� � �������.
                                                                               function DllCanUnloadNow: HResult; stdcall; – ���������� �������-
                                                                          ��� ���������� COM ��� ��������, ����������� �� ������� ��������

                                   15                                                                         16