ВУЗ:
Составители:
ɉɪɢɦɟɱɚɧɢɟ 1.5. ɋɢɫɬɟɦɧɵɣ ɪɟɟɫɬɪ ɹɜɥɹɟɬɫɹ ɨɱɟɧɶ ɜɚɠɧɨɣ ɫɭɳɧɨ-
ɫɬɶɸ ɜ ɨɩɟɪɚɰɢɨɧɧɨɣ ɫɢɫɬɟɦɟ. ɍɞɚɥɟɧɢɟ ɢɥɢ ɢɡɦɟɧɟɧɢɟ ɜ ɧɺɦ ɤɚɤɢɯ-ɥɢɛɨ
ɞɚɧɧɵɯ ɦɨɠɟɬ ɩɪɢɜɟɫɬɢ ɤ ɧɟɜɨɡɦɨɠɧɨɫɬɢ ɪɚɛɨɬɵ ɧɟɤɨɬɨɪɵɯ ɩɪɢɥɨ-
ɠɟɧɢɣ, ɚ ɬɨ ɢ ɜɫɟɣ ɨɩɟɪɚɰɢɨɧɧɨɣ ɫɢɫɬɟɦɵ. ȼɫɟ ɢɡɦɟɧɟɧɢɹ ɜ ɪɟɟɫɬɪɟ ɡɚ-
ɩɢɫɵɜɚɸɬɫɹ ɫɪɚɡɭ ɧɚ ɞɢɫɤ, ɨɬɤɚɬɨɜ ɜ ɫɢɫɬɟɦɟ ɧɟɬ. ɍɞɚɥɟɧɢɟ ɢɥɢ ɢɡɦɟ-
ɧɟɧɢɟ ɞɚɧɧɵɯ ɜ ɫɢɫɬɟɦɧɨɦ ɪɟɟɫɬɪɟ ɛɟɡ ɱɟɬɤɨɝɨ ɩɨɧɢɦɚɧɢɹ ɫɭɬɢ ɩɪɨɢɫ-
ɯɨɞɹɳɟɝɨ ɤɪɚɣɧɟ ɨɩɚɫɧɨ. ɉɨɩɵɬɤɢ ɮɟɧɨɦɟɧɨɥɨɝɢɱɟɫɤɨɝɨ ɢɫɫɥɟɞɨɜɚɧɢɹ
“ɱɬɨ ɛɭɞɟɬ, ɟɫɥɢ ɭɞɚɥɢɬɶ ɜɨɬ ɷɬɨ…” ɦɨɝɭɬ ɩɥɨɯɨ ɤɨɧɱɢɬɶɫɹ.
Ⱦɚɧɧɵɟ ɨɛ ɨɛɴɟɤɬɚɯ COM ɯɪɚɧɹɬɫɹ ɜ ɩɨɞɪɚɡɞɟɥɟ CLSID ɪɚɡɞɟɥɚ
HKEY_CLASSES_ROOT. ȼ ɷɬɨɦ ɪɚɡɞɟɥɟ ɩɟɪɟɱɢɫɥɟɧɵ CLSID ɜɫɟɯ ɤɨɦ-
ɩɨɧɟɧɬɨɜ, ɭɫɬɚɧɨɜɥɟɧɧɵɯ ɜ ɫɢɫɬɟɦɟ. Ʉɚɠɞɵɣ CLSID ɫɨɞɟɪɠɢɬ ɩɚɪɚɦɟɬɪ
ɩɨ ɭɦɨɥɱɚɧɢɸ, ɧɚɡɵɜɚɟɦɵɣ «ɞɪɭɠɟɫɬɜɟɧɧɵɦ» ɢɦɟɧɟɦ ɤɨɦɩɨɧɟɧɬɚ. ȼ
ɪɚɡɞɟɥɟ ɨɩɢɫɚɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɟɫɬɶ ɩɨɞɪɚɡɞɟɥ LocalServer32 (ɞɥɹ ɜɧɟɲɧɢɯ
COM-ɫɟɪɜɟɪɨɜ) ɢɥɢ InprocServer32 (ɞɥɹ ɜɧɭɬɪɟɧɧɢɯ COM-ɫɟɪɜɟɪɨɜ), ɫɨ-
ɞɟɪɠɚɳɢɯ ɢɦɹ ɩɪɢɥɨɠɟɧɢɹ ɢɥɢ DLL, ɜ ɤɨɬɨɪɵɯ ɧɚɯɨɞɢɬɫɹ ɤɨɦɩɨɧɟɧɬ.
ɂɦɹ ɮɚɣɥɚ ɢ CLSID – ɷɬɨ ɧɚɢɛɨɥɟɟ ɜɚɠɧɵɟ ɞɚɧɧɵɟ ɞɥɹ ɧɨɪɦɚɥɶɧɨɝɨ
ɮɭɧɤɰɢɨɧɢɪɨɜɚɧɢɹ, ɧɨ ɞɥɹ ɧɟɤɨɬɨɪɵɯ, ɛɨɥɟɟ ɫɥɨɠɧɵɯ ɤɨɦɩɨɧɟɧɬɨɜ
COM, ɯɪɚɧɢɬɫɹ ɢ ɞɪɭɝɚɹ ɢɧɮɨɪɦɚɰɢɹ. ɇɚɩɪɢɦɟɪ, ɷɬɨ ɧɨɦɟɪ ɛɢɛɥɢɨɬɟɤɢ
ɬɢɩɨɜ, ɩɨɞɞɟɪɠɢɜɚɟɦɨɣ ɞɚɧɧɵɦ COM-ɫɟɪɜɟɪɨɦ (TypeLib), ɧɨɦɟɪ ɜɟɪɫɢɢ
COM-ɫɟɪɜɟɪɚ (Version), ɩɪɨɝɪɚɦɦɧɨɟ ɢɦɹ (ProgID) ɢɬ. ɩ.
ɑɬɨɛɵ ɡɚɪɟɝɢɫɬɪɢɪɨɜɚɬɶ ɜɫɬɪɨɟɧɧɵɣ COM-ɫɟɪɜɟɪ ɜ ɫɢɫɬɟɦɧɨɦ ɪɟɟ-
ɫɬɪɟ, ɧɟɨɛɯɨɞɢɦɨ ɜɵɡɜɚɬɶ ɮɭɧɤɰɢɸ DllRegisterServer, ɧɚɯɨɞɹɳɭɸɫɹ ɜɧɭɬ-
ɪɢ DLL-ɦɨɞɭɥɹ COM-ɫɟɪɜɟɪɚ. ɗɬɨ ɦɨɠɧɨ ɫɞɟɥɚɬɶ ɜ ɩɪɢɥɨɠɟɧɢɢ, ɩɪɟɞɜɚ-
ɪɢɬɟɥɶɧɨ ɡɚɝɪɭɡɢɜ DLL, ɢɥɢ ɫ ɩɨɦɨɳɶɸ ɫɬɚɧɞɚɪɬɧɨɣ ɭɬɢɥɢɬɵ Windows
RegSvr32.exe, ɜɵɩɨɥɧɢɜ ɤɨɦɚɧɞɭ:
RegSvr32 -s <ɢɦɹ ɫɟɪɜɟɪɚ>
ɉɪɢ ɭɞɚɥɟɧɢɢ ɜɫɬɪɨɟɧɧɨɝɨ ɫɟɪɜɟɪɚ ɢɡ ɫɢɫɬɟɦɵ ɧɟɨɛɯɨɞɢɦɨ ɡɚɩɭɫ-
ɬɢɬɶ ɮɭɧɤɰɢɸ DllUnregisterServer. ȼ Windows ɭɞɚɥɟɧɢɟ ɫɟɪɜɟɪɚ ɨɫɭɳɟɫɬ-
ɜɥɹɟɬɫɹ ɤɨɦɚɧɞɨɣ:
RegSvr32 -u <ɢɦɹ ɫɟɪɜɟɪɚ>
Ⱦɥɹ ɪɟɝɢɫɬɪɚɰɢɢ ɜɧɟɲɧɢɯ COM-ɫɟɪɜɟɪɨɜ ɬɪɟɛɭɟɬɫɹ ɡɚɩɭɫɬɢɬɶ
ɩɪɢɥɨɠɟɧɢɟ, ɜɤɥɸɱɢɜ ɜ ɤɨɦɚɧɞɧɭɸ ɫɬɪɨɤɭ ɡɚɩɭɫɤɚ ɤɥɸɱ /regserver, ɚ
ɞɥɹ ɭɞɚɥɟɧɢɹ ɧɭɠɧɨ ɢɫɩɨɥɶɡɨɜɚɬɶ ɤɥɸɱ /unregserver. ȼɫɬɪɨɟɧɧɵɣ COM-
ɫɟɪɜɟɪ ɪɟɝɢɫɬɪɢɪɭɟɬɫɹ ɢ ɩɪɢ ɩɟɪɜɨɦ ɡɚɩɭɫɤɟ ɩɪɢɥɨɠɟɧɢɹ ɛɟɡ ɜɫɹɤɢɯ
ɞɨɩɨɥɧɢɬɟɥɶɧɵɯ ɤɥɸɱɟɣ ɜ ɤɨɦɚɧɞɧɨɣ ɫɬɪɨɤɟ, ɧɨ ɩɨɫɥɟ ɷɬɨɝɨ ɫɟɪɜɟɪ ɛɭ-
ɞɟɬ ɩɪɨɞɨɥɠɚɬɶ ɪɚɛɨɬɚɬɶ.
13
II. Ɋɚɡɪɚɛɨɬɤɚ COM-ɫɟɪɜɟɪɨɜ ɜ Delphi
2.1. Ɋɚɡɪɚɛɨɬɤɚ ɢɧɬɟɪɮɟɣɫɚ
ɉɪɟɠɞɟ, ɱɟɦ ɪɟɚɥɢɡɨɜɵɜɚɬɶ COM-ɫɟɪɜɟɪ, ɧɭɠɧɨ ɪɚɡɪɚɛɨɬɚɬɶ ɢɧɬɟɪ-
ɮɟɣɫ. ɂɧɬɟɪɮɟɣɫ ɹɜɥɹɟɬɫɹ ɫɜɹɡɶɸ ɦɟɠɞɭ ɤɥɢɟɧɬɨɦ ɢ ɫɟɪɜɟɪɨɦ (ɩ. 1.4).
ȼ Delphi ɢɧɬɟɪɮɟɣɫɵ ɨɩɢɫɵɜɚɸɬɫɹ ɜ ɩɪɨɝɪɚɦɦɧɨɦ ɦɨɞɭɥɟ ɩɨ ɫɥɟ-
ɞɭɸɳɟɣ ɫɬɪɭɤɬɭɪɟ:
<ɢɦɹ ɢɧɬɟɪɮɟɣɫɚ>=interface
[<ɫɬɪɨɤɚ ɫ IID>]
{ɫɩɢɫɨɤ ɩɪɨɰɟɞɭɪ ɢ ɮɭɧɤɰɢɣ}
end;
ɂɧɬɟɪɮɟɣɫɵ, ɤɚɤ ɢ ɤɥɚɫɫɵ, ɨɛɥɚɞɚɸɬ ɫɜɨɣɫɬɜɨɦ ɧɚɫɥɟɞɨɜɚɧɢɹ:
<ɢɦɹ ɢɧɬɟɪɮɟɣɫɚ>=interface(<ɢɦɹ ɪɨɞɢɬɟɥɶɫɤɨɝɨ ɢɧɬɟɪɮɟɣɫɚ>)
[<ɫɬɪɨɤɚ ɫ IID>]
{ɫɩɢɫɨɤ ɩɪɨɰɟɞɭɪ ɢ ɮɭɧɤɰɢɣ}
end;
ɉɪɢɦɟɱɚɧɢɟ 2.1.
ȼ ɬɟɯɧɨɥɨɝɢɢ COM ɩɪɢɧɹɬɨ ɧɚɡɜɚɧɢɟ ɢɧɬɟɪɮɟɣɫɨɜ
ɧɚɱɢɧɚɬɶ ɫ ɩɪɟɮɢɤɫɚ «I» (IUnknown, IDispatch, IMyInterface ɢɬ. ɩ.).
ɉɪɢɦɟɱɚɧɢɟ 2.2.
IID ɞɨɥɠɟɧ ɛɵɬɶ ɭɧɢɤɚɥɶɧɵɦ, ɩɨɷɬɨɦɭ, ɜɫɹɤɢɣ ɪɚɡ
ɪɚɡɪɚɛɚɬɵɜɚɹ ɧɨɜɵɣ ɢɧɬɟɪɮɟɣɫ, ɢɫɩɨɥɶɡɭɣɬɟ ɝɟɧɟɪɚɬɨɪ ɭɧɢɤɚɥɶɧɵɯ
ɢɞɟɧɬɢɮɢɤɚɬɨɪɨɜ ɫɢɫɬɟɦɵ (ɜ Delphi ɷɬɨ ɤɨɦɛɢɧɚɰɢɹ ɤɥɚɜɢɲ
Ctrl+Shift+G).
ɉɪɢɦɟɱɚɧɢɟ 2.3.
ɉɪɢ ɨɩɢɫɚɧɢɢ ɦɟɬɨɞɨɜ ɢɧɬɟɪɮɟɣɫɨɜ ɧɟɨɛɯɨɞɢɦɨ
ɢɫɩɨɥɶɡɨɜɚɬɶ ɞɢɪɟɤɬɢɜɭ stdcall, ɤɨɬɨɪɚɹ ɨɩɪɟɞɟɥɹɟɬ ɩɨɪɹɞɨɤ ɩɟɪɟɞɚɱɢ
ɩɚɪɚɦɟɬɪɨɜ ɢ ɜɵɡɨɜɚ ɮɭɧɤɰɢɣ ɜ ɫɨɨɬɜɟɬɫɬɜɢɢ ɫɨ ɫɬɚɧɞɚɪɬɨɦ, ɩɪɢɧɹ-
ɬɵɦ ɜ ɨɩɟɪɚɰɢɨɧɧɨɣ ɫɢɫɬɟɦɟ Windows.
ȼɫɟ ɢɧɬɟɪɮɟɣɫɵ ɩɪɹɦɨ ɢɥɢ ɤɨɫɜɟɧɧɨ ɧɚɫɥɟɞɭɸɬɫɹ ɨɬ Iunknown, ɤɨ-
ɬɨɪɵɣ ɫɨɞɟɪɠɢɬ ɜɚɠɧɵɟ ɮɭɧɤɰɢɢ ɞɥɹ ɪɟɚɥɢɡɚɰɢɢ ɬɟɯɧɨɥɨɝɢɢ COM
(ɩ. 1.5).
Ⱦɥɹ ɤɨɪɪɟɤɬɧɨɣ ɪɚɛɨɬɵ ɩɪɢɥɨɠɟɧɢɹ ɜ ɢɧɬɟɪɮɟɣɫɟ ɫɥɟɞɭɟɬ ɨɩɢɫɵɜɚɬɶ
ɮɭɧɤɰɢɢ, ɜɨɡɜɪɚɳɚɸɳɢɟ ɞɚɧɧɵɟ ɱɟɪɟɡ ɩɚɪɚɦɟɬɪɵ, ɚ ɜ ɤɚɱɟɫɬɜɟ ɪɟɡɭɥɶɬɚ-
ɬɚ – ɢɧɮɨɪɦɚɰɢɸ ɨ ɤɨɪɪɟɤɬɧɨɫɬɢ ɜɵɩɨɥɧɟɧɢɹ ɨɩɟɪɚɰɢɣ. ɗɬɨ ɦɨɠɟɬ ɛɵɬɶ
ɭɫɥɨɜɧɵɣ ɤɨɞ ɨɲɢɛɤɢ ɢɥɢ ɠɟ ɩɪɨɫɬɨ ɢɧɮɨɪɦɚɰɢɹ ɨɛ ɭɫɩɟɲɧɨɫɬɢ ɜɵɩɨɥ-
ɧɟɧɢɹ, ɧɚɩɪɢɦɟɪ, true – ɮɭɧɤɰɢɹ ɜɵɩɨɥɧɟɧɚ ɭɫɩɟɲɧɨ, false – ɜɨɡɧɢɤɥɢ
ɨɲɢɛɤɢ. Ɍɚɤɚɹ ɪɟɚɥɢɡɚɰɢɹ ɞɚɟɬ ɜɨɡɦɨɠɧɨɫɬɶ ɤɨɧɬɪɨɥɢɪɨɜɚɬɶ ɢ ɨɛɪɚɛɚɬɵ-
ɜɚɬɶ ɨɲɢɛɤɢ ɜ ɤɥɢɟɧɬɟ.
14
���������� 1.5. ��������� ������ �������� ����� ������ �����- II. ���������� COM-�������� � Delphi
���� � ������������ �������. �������� ��� ��������� � ��� �����-����
������ ����� �������� � ������������� ������ ��������� �����- 2.1. ���������� ����������
�����, � �� � ���� ������������ �������. ��� ��������� � ������� ��-
���������� ����� �� ����, ������� � ������� ���. �������� ��� ����- ������, ��� ������������� COM-������, ����� ����������� �����-
����� ������ � ��������� ������� ��� ������� ��������� ���� �����- ����. ��������� �������� ������ ����� �������� � �������� (�. 1.4).
�������� ������ ������. ������� ������������������� ������������ � Delphi ���������� ����������� � ����������� ������ �� ���-
“��� �����, ���� ������� ��� ���…” ����� ����� ���������. ������ ���������:
<��� ����������>=interface
������ �� �������� COM �������� � ���������� CLSID ������� [<������ � IID>]
HKEY_CLASSES_ROOT. � ���� ������� ����������� CLSID ���� ���- {������ �������� � �������}
��������, ������������� � �������. ������ CLSID �������� �������� end;
�� ���������, ���������� «�������������» ������ ����������. �
������� �������� ���������� ���� ��������� LocalServer32 (��� ������� ����������, ��� � ������, �������� ��������� ������������:
COM-��������) ��� InprocServer32 (��� ���������� COM-��������), ��- <��� ����������>=interface(<��� ������������� ����������>)
�������� ��� ���������� ��� DLL, � ������� ��������� ���������. [<������ � IID>]
��� ����� � CLSID – ��� �������� ������ ������ ��� ����������� {������ �������� � �������}
����������������, �� ��� ���������, ����� ������� ����������� end;
COM, �������� � ������ ����������. ��������, ��� ����� ����������
�����, �������������� ������ COM-�������� (TypeLib), ����� ������ ���������� 2.1. � ���������� COM ������� �������� �����������
COM-������� (Version), ����������� ��� (ProgID) � �. �. �������� � �������� «I» (IUnknown, IDispatch, IMyInterface � �. �.).
����� ���������������� ���������� COM-������ � ��������� ���-
���������� 2.2. IID ������ ���� ����������, �������, ������ ���
����, ���������� ������� ������� DllRegisterServer, ����������� ����-
������������ ����� ���������, ����������� ��������� ����������
�� DLL-������ COM-�������. ��� ����� ������� � ����������, ������-
��������������� ������� (� Delphi ��� ���������� ������
�������� �������� DLL, ��� � ������� ����������� ������� Windows
Ctrl+Shift+G).
RegSvr32.exe, �������� �������:
���������� 2.3. ��� �������� ������� ����������� ����������
RegSvr32 -s <��� �������>
������������ ��������� stdcall, ������� ���������� ������� ��������
��� �������� ����������� ������� �� ������� ���������� �����- ���������� � ������ ������� � ������������ �� ����������, �����-
���� ������� DllUnregisterServer. � Windows �������� ������� �������- ��� � ������������ ������� Windows.
������� ��������:
��� ���������� ����� ��� �������� ����������� �� Iunknown, ��-
RegSvr32 -u <��� �������> ����� �������� ������ ������� ��� ���������� ���������� COM
��� ����������� ������� COM-�������� ��������� ��������� (�. 1.5).
����������, ������� � ��������� ������ ������� ���� /regserver, � ��� ���������� ������ ���������� � ���������� ������� ���������
��� �������� ����� ������������ ���� /unregserver. ���������� COM- �������, ������������ ������ ����� ���������, � � �������� ��������-
������ �������������� � ��� ������ ������� ���������� ��� ������ �� – ���������� � ������������ ���������� ��������. ��� ����� ����
�������������� ������ � ��������� ������, �� ����� ����� ������ ��- �������� ��� ������ ��� �� ������ ���������� �� ���������� �����-
��� ���������� ��������. �����, ��������, true – ������� ��������� �������, false – ��������
������. ����� ���������� ���� ����������� �������������� � ��������-
���� ������ � �������.
13 14
Страницы
- « первая
- ‹ предыдущая
- …
- 5
- 6
- 7
- 8
- 9
- …
- следующая ›
- последняя »
