ВУЗ:
Составители:
ɞɪɭɝɢɦɢ ɩɪɨɢɡɜɨɞɢɬɟɥɹɦɢ, ɛɭɞɭɬ ɜɵɝɥɹɞɟɬɶ ɛɨɥɟɟ ɫɥɭɱɚɣɧɵɦɢ ɢ ɧɟ ɛɭ-
ɞɭɬ ɢɦɟɬɶ ɫɬɨɥɶɤɨ ɧɭɥɟɣ.
1.4. Ⱦɨɫɬɭɩ ɤ ɤɨɦɩɨɧɟɧɬɚɦ. ɂɧɬɟɪɮɟɣɫɵ
Ɏɚɤɬɢɱɟɫɤɢ ɪɟɚɥɢɡɚɰɢɹ ɤɨɦɩɨɧɟɧɬɚ ɡɚɤɪɵɬɚ ɞɥɹ ɩɪɢɥɨɠɟɧɢɹ. ɉɨɥɶ-
ɡɨɜɚɬɟɥɹ ɧɟ ɞɨɥɠɧɵ ɢɧɬɟɪɟɫɨɜɚɬɶ ɫɩɨɫɨɛɵ ɪɟɚɥɢɡɚɰɢɢ ɤɨɦɩɨɧɟɧɬɚ, ɟɦɭ
ɧɟɨɛɯɨɞɢɦɨ ɡɧɚɬɶ ɬɨɥɶɤɨ ɮɭɧɤɰɢɨɧɚɥɶɧɵɟ ɜɨɡɦɨɠɧɨɫɬɢ, ɤɨɬɨɪɵɟ ɦɨɠɟɬ
ɩɪɟɞɨɫɬɚɜɢɬɶ ɤɨɦɩɨɧɟɧɬ. Ⱦɨɫɬɭɩ ɤ ɤɨɦɩɨɧɟɧɬɚɦ ɨɫɭɳɟɫɬɜɥɹɟɬɫɹ ɱɟɪɟɡ
ɢɧɬɟɪɮɟɣɫ, ɤɨɬɨɪɵɣ ɢɝɪɚɟɬ ɪɨɥɶ ɤɨɧɬɪɚɤɬɚ (ɞɨɝɨɜɨɪɚ) ɦɟɠɞɭ ɨɛɴɟɤɬɨɦ ɢ
ɩɨɥɶɡɨɜɚɬɟɥɟɦ. ɉɨ ɫɭɳɟɫɬɜɭ ɢɧɬɟɪɮɟɣɫ ɩɪɟɞɫɬɚɜɥɹɟɬ ɫɨɛɨɣ ɫɩɢɫɨɤ ɭɤɚɡɚ-
ɬɟɥɟɣ ɧɚ ɩɪɨɰɟɞɭɪɵ ɢ ɮɭɧɤɰɢɢ, ɪɟɚɥɢɡɨɜɚɧɧɵɟ ɜ ɤɨɦɩɨɧɟɧɬɟ.
Ɍɚɤɢɦ ɨɛɪɚɡɨɦ, ɢɧɬɟɪɮɟɣɫ ɩɨɯɨɠ ɧɚ ɚɛɫɬɪɚɤɬɧɵɣ ɤɥɚɫɫ, ɜ ɤɨɬɨɪɨɦ
ɩɟɪɟɱɢɫɥɟɧɵ ɜɢɪɬɭɚɥɶɧɵɟ ɩɪɨɰɟɞɭɪɵ ɢ ɮɭɧɤɰɢɢ, ɪɟɚɥɢɡɚɰɢɹ ɤɨɬɨɪɵɯ
ɥɨɠɢɬɫɹ ɧɚ ɞɨɱɟɪɧɢɟ ɤɥɚɫɫɵ. ɂɧɵɦɢ ɫɥɨɜɚɦɢ, ɢɧɬɟɪɮɟɣɫ ɨɩɪɟɞɟɥɹɟɬ ɩɨ-
ɜɟɞɟɧɢɟ ɨɛɴɟɤɬɚ, ɧɨ ɧɟ ɩɨɞɞɟɪɠɢɜɚɟɬ ɫɪɟɞɫɬɜɚ ɪɟɚɥɢɡɚɰɢɢ ɷɬɨɝɨ ɩɨɜɟɞɟ-
ɧɢɹ.
ȿɳɟ ɨɞɧɢɦ ɜɚɠɧɵɦ ɫɜɨɣɫɬɜɨɦ COM-ɤɨɦɩɨɧɟɧɬɨɜ ɹɜɥɹɟɬɫɹ ɜɨɡɦɨɠ-
ɧɨɫɬɶ ɩɨɞɞɟɪɠɤɢ ɫɪɚɡɭ ɧɟɫɤɨɥɶɤɢɯ ɢɧɬɟɪɮɟɣɫɨɜ. ɗɬɨ ɞɚɟɬ ɜɨɡɦɨɠɧɨɫɬɶ
ɪɚɡɛɢɬɶ ɛɨɥɶɲɨɣ ɧɚɛɨɪ ɩɪɨɰɟɞɭɪ ɧɚ ɧɟɫɤɨɥɶɤɨ ɧɟɛɨɥɶɲɢɯ ɥɨɝɢɱɟɫɤɢɯ
ɝɪɭɩɩ.
ɉɪɢɦɟɱɚɧɢɟ 1.3.
Ɋɟɚɥɢɡɨɜɚɧɧɵɟ ɢ ɢɫɩɨɥɶɡɭɟɦɵɟ ɢɧɬɟɪɮɟɣɫɵ ɧɟ ɦɟ-
ɧɹɸɬɫɹ ɧɢɤɨɝɞɚ. ɉɪɢ ɦɨɞɢɮɢɤɚɰɢɢ ɤɨɦɩɨɧɟɧɬɚ ɫɭɳɟɫɬɜɭɸɳɢɣ ɢɧɬɟɪ-
ɮɟɣɫ ɧɟ ɦɟɧɹɟɬɫɹ, ɚ ɞɨɛɚɜɥɹɟɬɫɹ ɧɨɜɵɣ. ɗɬɨ ɨɛɟɫɩɟɱɢɜɚɟɬ ɤɨɧɬɟɤɫɬɧɭɸ
ɧɟɡɚɜɢɫɢɦɨɫɬɶ COM.
Ʉɚɤ ɢ ɤɨɦɩɨɧɟɧɬɵ, ɢɧɬɟɪɮɟɣɫɵ ɬɨɠɟ ɢɦɟɸɬ ɫɜɨɣ ɧɨɦɟɪ, ɤɨɬɨɪɵɣ ɧɚ-
ɡɵɜɚɸɬ IID (Interface Identifier), ɬɨ ɟɫɬɶ ɢɞɟɧɬɢɮɢɤɚɬɨɪ ɢɧɬɟɪɮɟɣɫɚ. ɗɬɨ
ɩɨɡɜɨɥɹɟɬ ɢɫɩɨɥɶɡɨɜɚɬɶ ɢɧɬɟɪɮɟɣɫɵ, ɧɟ ɨɩɚɫɚɹɫɶ ɫɨɜɩɚɞɟɧɢɹ ɢɦɟɧ.
1.5. ɂɟɪɚɪɯɢɹ ɢɧɬɟɪɮɟɣɫɨɜ. ɂɧɬɟɪɮɟɣɫ IUnknown
ȼ ɨɫɧɨɜɟ ɜɫɟɯ COM-ɢɧɬɟɪɮɟɣɫɨɜ ɥɟɠɢɬ ɢɧɬɟɪɮɟɣɫ ɫ ɢɦɟɧɟɦ
IUnknown. ɗɬɨɬ ɢɧɬɟɪɮɟɣɫ ɩɨɞɞɟɪɠɢɜɚɟɬ ɬɪɢ ɜɚɠɧɵɟ ɮɭɧɤɰɢɢ, ɤɨɬɨɪɵɟ
ɧɚɫɥɟɞɭɸɬɫɹ ɤɚɠɞɨɦɭ ɢɧɬɟɪɮɟɣɫɭ:
IUnknown=interface
[‘{00000000-0000-0000-C000-000000000046}’]
function QueryInterface(const IID: TGUID; out obj): HResult;
stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
9
ɉɪɢ ɞɢɧɚɦɢɱɟɫɤɨɣ ɡɚɝɪɭɡɤɟ ɤɨɦɩɨɧɟɧɬɚ ɫɢɫɬɟɦɚ ɧɟ ɡɧɚɟɬ, ɤɚɤɢɟ ɩɨɞ-
ɞɟɪɠɢɜɚɸɬɫɹ ɢɧɬɟɪɮɟɣɫɵ, ɧɨ ɡɧɚɟɬ, ɱɬɨ ɩɪɹɦɨ ɢɥɢ ɤɨɫɜɟɧɧɨ ɩɨɞɞɟɪɠɢɜɚ-
ɟɬɫɹ ɢɧɬɟɪɮɟɣɫ IUnknown, ɜ ɤɨɬɨɪɨɦ ɪɟɚɥɢɡɨɜɚɧɚ ɮɭɧɤɰɢɹ QueryInterface
ɫɨ ɫɥɟɞɭɸɳɢɦɢ ɩɚɪɚɦɟɬɪɚɦɢ:
IID – ɢɞɟɧɬɢɮɢɤɚɬɨɪ ɡɚɩɪɚɲɢɜɚɟɦɨɝɨ ɢɧɬɟɪɮɟɣɫɚ;
Obj – ɩɪɟɞɧɚɡɧɚɱɟɧ ɞɥɹ ɯɪɚɧɟɧɢɹ ɜɨɡɜɪɚɳɚɟɦɨɝɨ ɢɧɬɟɪɮɟɣɫɧɨɝɨ ɭɤɚ-
ɡɚɬɟɥɹ.
Ɏɭɧɤɰɢɹ QueryInterface ɞɨɥɠɧɚ ɛɵɬɶ ɪɟɚɥɢɡɨɜɚɧɚ ɜ ɤɨɦɩɨɧɟɧɬɟ ɬɚ-
ɤɢɦ ɨɛɪɚɡɨɦ, ɱɬɨɛɵ ɦɨɠɧɨ ɛɵɥɨ ɩɨɥɭɱɢɬɶ ɥɸɛɨɣ ɩɨɞɞɟɪɠɢɜɚɟɦɵɣ ɢɧ-
ɬɟɪɮɟɣɫ.
ȿɫɥɢ ɡɚɩɪɚɲɢɜɚɟɦɵɣ ɢɧɬɟɪɮɟɣɫ ɜ ɤɨɦɩɨɧɟɧɬɟ ɪɟɚɥɢɡɨɜɚɧ,
QueryInterface ɜɨɡɜɪɚɳɚɟɬ ɭɤɚɡɚɬɟɥɶ ɧɚ ɢɧɬɟɪɮɟɣɫ ɜ ɩɚɪɚɦɟɬɪɟ obj ɢ ɡɧɚ-
ɱɟɧɢɟ S_OK, ɢɧɚɱɟ – E_NOINTERFACE.
ɉɨɫɥɟ ɪɚɛɨɬɵ ɫ ɤɨɦɩɨɧɟɧɬɨɦ ɧɟɨɛɯɨɞɢɦɨ ɟɝɨ ɜɵɝɪɭɡɢɬɶ ɢɡ ɩɚɦɹɬɢ.
ɋɥɨɠɧɨɫɬɢ ɦɨɝɭɬ ɜɨɡɧɢɤɧɭɬɶ, ɤɨɝɞɚ ɧɚ ɤɨɦɩɨɧɟɧɬ, ɜɟɪɧɟɟ, ɧɚ ɟɝɨ ɢɧɬɟɪ-
ɮɟɣɫɵ, ɢɦɟɟɬɫɹ ɧɟɫɤɨɥɶɤɨ ɫɫɵɥɨɤ. ȼ ɛɨɥɶɲɢɯ ɩɪɨɟɤɬɚɯ ɭɫɥɟɞɢɬɶ ɡɚ ɷɬɢɦ
ɩɪɚɤɬɢɱɟɫɤɢ ɧɟɜɨɡɦɨɠɧɨ.
ɑɬɨɛɵ ɢɡɛɟɠɚɬɶ ɬɚɤɨɣ ɫɢɬɭɚɰɢɢ ɢɫɩɨɥɶɡɭɟɬɫɹ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ. Ʉɨɝɞɚ
ɤɥɢɟɧɬ ɩɨɥɭɱɚɟɬ ɧɟɤɨɬɨɪɵɣ ɢɧɬɟɪɮɟɣɫ, ɡɧɚɱɟɧɢɟ ɷɬɨɝɨ ɫɱɟɬɱɢɤɚ ɭɜɟɥɢɱɢ-
ɜɚɟɬɫɹ ɧɚ ɟɞɢɧɢɰɭ. Ʉɨɝɞɚ ɤɥɢɟɧɬ ɡɚɤɚɧɱɢɜɚɟɬ ɪɚɛɨɬɭ ɫ ɢɧɬɟɪɮɟɣɫɨɦ, ɡɧɚ-
ɱɟɧɢɟ ɧɚ ɟɞɢɧɢɰɭ ɭɦɟɧɶɲɚɟɬɫɹ. Ʉɨɝɞɚ ɨɧɨ ɞɨɯɨɞɢɬ ɞɨ ɧɭɥɹ, ɤɨɦɩɨɧɟɧɬ
ɭɞɚɥɹɟɬ ɫɟɛɹ ɢɡ ɩɚɦɹɬɢ. Ʉɥɢɟɧɬ ɬɚɤɠɟ ɭɜɟɥɢɱɢɜɚɟɬ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ, ɤɨɝɞɚ
ɫɨɡɞɚɟɬ ɧɨɜɭɸ ɫɫɵɥɤɭ ɧɚ ɭɠɟ ɢɦɟɸɳɢɣɫɹ ɭ ɧɟɝɨ ɢɧɬɟɪɮɟɣɫ. Ⱦɥɹ ɩɪɨɜɟ-
ɞɟɧɢɹ ɷɬɢɯ ɨɩɟɪɚɰɢɣ ɩɪɟɞɧɚɡɧɚɱɟɧɵ ɮɭɧɤɰɢɢ _AddRef ɢ _Release.
_AddRef – ɭɜɟɥɢɱɢɜɚɟɬ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɧɚ ɟɞɢɧɢɰɭ ɢ ɜɨɡɜɪɚɳɚɟɬ ɤɨ-
ɥɢɱɟɫɬɜɨ ɫɫɵɥɨɤ.
_Release – ɭɦɟɧɶɲɚɟɬ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɧɚ ɟɞɢɧɢɰɭ ɢ ɜɨɡɜɪɚɳɚɟɬ ɤɨ-
ɥɢɱɟɫɬɜɨ ɫɫɵɥɨɤ. ȿɫɥɢ ɫɱɟɬɱɢɤ ɪɚɜɟɧ ɧɭɥɸ, ɭɧɢɱɬɨɠɚɟɬ ɨɛɴɟɤɬ.
Ⱦɥɹ ɤɨɪɪɟɤɬɧɨɣ ɪɚɛɨɬɵ ɩɪɢɥɨɠɟɧɢɹ ɢ ɤɨɦɩɨɧɟɧɬɨɜ ɧɟɨɛɯɨɞɢɦɨ
ɫɬɪɨɝɨ ɫɨɛɥɸɞɚɬɶ ɬɪɢ ɩɪɚɜɢɥɚ, ɩɪɢɧɹɬɵɯ ɩɪɢ ɪɚɛɨɬɟ ɫ COM:
1. Ɏɭɧɤɰɢɢ, ɜɨɡɜɪɚɳɚɸɳɢɟ ɢɧɬɟɪɮɟɣɫɵ, ɩɟɪɟɞ ɜɨɡɜɪɚɬɨɦ ɜɫɟɝɞɚ
ɞɨɥɠɧɵ ɜɵɡɜɚɬɶ _AddRef ɞɥɹ ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɭɤɚɡɚɬɟɥɹ.
ɗɬɨ ɬɚɤɠɟ ɨɬɧɨɫɢɬɫɹ ɢ ɤ QueryInterface.
2. ɉɨɫɥɟ ɡɚɜɟɪɲɟɧɢɹ ɪɚɛɨɬɵ ɫ ɢɧɬɟɪɮɟɣɫɨɦ ɫɥɟɞɭɟɬ ɜɵɡɜɚɬɶ ɞɥɹ
ɧɟɝɨ _Release.
3. ȼɫɟɝɞɚ ɫɥɟɞɭɟɬ ɜɵɡɵɜɚɬɶ _AddRef, ɤɨɝɞɚ ɫɨɡɞɚɟɬɫɹ ɧɨɜɚɹ ɫɫɵɥɤɚ
ɧɚ ɞɚɧɧɵɣ ɢɧɬɟɪɮɟɣɫ.
ɉɪɢɜɟɞɟɦ ɩɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ QueryInterface, _AddRef, _Release ɜɧɟ-
ɤɨɟɦ Ʉɨɦɩɨɧɟɧɬɟ TSomeObject:
type TSomeObject=class(TObject, ISomeInterface)
private
10
������� ���������������, ����� ��������� ����� ���������� � �� ��- ��� ������������ �������� ���������� ������� �� �����, ����� ���- ��� ����� ������� �����. ����������� ����������, �� �����, ��� ����� ��� �������� ����������- ���� ��������� IUnknown, � ������� ����������� ������� QueryInterface 1.4. ������ � �����������. ���������� �� ���������� �����������: IID – ������������� �������������� ����������; ���������� ���������� ���������� ������� ��� ����������. ����- Obj – ������������ ��� �������� ������������� ������������� ���- �������� �� ������ ������������ ������� ���������� ����������, ��� ������. ���������� ����� ������ �������������� �����������, ������� ����� ������� QueryInterface ������ ���� ����������� � ���������� ��- ������������ ���������. ������ � ����������� �������������� ����� ��� �������, ����� ����� ���� �������� ����� �������������� ��- ���������, ������� ������ ���� ��������� (��������) ����� �������� � �������. �������������. �� �������� ��������� ������������ ����� ������ �����- ���� ������������� ��������� � ���������� ����������, ����� �� ��������� � �������, ������������� � ����������. QueryInterface ���������� ��������� �� ��������� � ��������� obj � ���- ����� �������, ��������� ����� �� ����������� �����, � ������� ����� S_OK, ����� – E_NOINTERFACE. ����������� ����������� ��������� � �������, ���������� ������� ����� ������ � ����������� ���������� ��� ��������� �� ������. ������� �� �������� ������. ����� �������, ��������� ���������� ��- ��������� ����� ����������, ����� �� ���������, ������, �� ��� �����- ������� �������, �� �� ������������ �������� ���������� ����� ������- �����, ������� ��������� ������. � ������� �������� �������� �� ���� ���. ����������� ����������. ��� ����� ������ ��������� COM-����������� �������� ������- ����� �������� ����� �������� ������������ ������� ������. ����� ����� ��������� ����� ���������� �����������. ��� ���� ����������� ������ �������� ��������� ���������, �������� ����� �������� �������- ������� ������� ����� �������� �� ��������� ��������� ���������� ������ �� �������. ����� ������ ����������� ������ � �����������, ���- �����. ����� �� ������� �����������. ����� ��� ������� �� ����, ��������� ���������� 1.3. ������������� � ������������ ���������� �� ��- ������� ���� �� ������. ������ ����� ����������� ������� ������, ����� ������ �������. ��� ����������� ���������� ������������ �����- ������� ����� ������ �� ��� ��������� � ���� ���������. ��� �����- ���� �� ��������, � ����������� �����. ��� ������������ ����������� ����� ���� �������� ������������� ������� _AddRef � _Release. ������������� COM. _AddRef – ����������� ������� ������ �� ������� � ���������� ��- ��� � ����������, ���������� ���� ����� ���� �����, ������� ��- �������� ������. ������ IID (Interface Identifier), �� ���� ������������� ����������. ��� _Release – ��������� ������� ������ �� ������� � ���������� ��- ��������� ������������ ����������, �� �������� ���������� ����. �������� ������. ���� ������� ����� ����, ���������� ������. ��� ���������� ������ ���������� � ����������� ���������� 1.5. �������� �����������. ��������� IUnknown ������ ��������� ��� �������, �������� ��� ������ � COM: 1. �������, ������������ ����������, ����� ��������� ������ � ������ ���� COM-����������� ����� ��������� � ������ ������ ������� _AddRef ��� ���������������� ���������. IUnknown. ���� ��������� ������������ ��� ������ �������, ������� ��� ����� ��������� � � QueryInterface. ����������� ������� ����������: 2. ����� ���������� ������ � ����������� ������� ������� ��� IUnknown=interface ���� _Release. [‘{00000000-0000-0000-C000-000000000046}’] 3. ������ ������� �������� _AddRef, ����� ��������� ����� ������ function QueryInterface(const IID: TGUID; out obj): HResult; �� ������ ���������. stdcall; �������� ������ ���������� QueryInterface, _AddRef, _Release � ��- function _AddRef: Integer; stdcall; ���� ���������� TSomeObject: function _Release: Integer; stdcall; end; type TSomeObject=class(TObject, ISomeInterface) private 9 10
Страницы
- « первая
- ‹ предыдущая
- …
- 3
- 4
- 5
- 6
- 7
- …
- следующая ›
- последняя »