ВУЗ:
Составители:
11
FRefCount: integer;
<ɪɟɚɥɢɡɚɰɢɹ ɡɚɤɪɵɬɨɣ ɱɚɫɬɢ>
public
//ɨɩɢɫɚɧɢɟ ɢɧɬɟɪɮɟɣɫɚ IUnknown
function QueryInterface(const IID:TGUID; out obj):HResult;
stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
<ɨɩɢɫɚɧɢɟ ɨɬɤɪɵɬɨɣ ɱɚɫɬɢ>
end;
<…………>
function TSomeObject. QueryInterface(const IID:TGUID; out
obj):HResult;
begin
if GetInterface(IID, Obj) then
begin
Result:=S_OK;
_AddRef;
end else Result:=E_NOINTERFACE;
end;
function TSomeObject._AddRef: Integer;
begin
Inc(FRefCount);
Result:=FRefCount;
end;
function TSomeObject._Release: Integer;
begin
Dec(FRefCount);
Result:=FRefCount;
if FRefCount=0 then destroy;
end;
<…………>
ȼ ɩɪɢɦɟɪɟ ɨɩɢɫɚɧ ɨɛɴɟɤɬ TSomeObject, ɩɨɞɞɟɪɠɢɜɚɸɳɢɣ ɢɧɬɟɪɮɟɣɫ
ISomeInterface, ɢ ɩɨɤɚɡɚɧɚ ɪɟɚɥɢɡɚɰɢɹ ɮɭɧɤɰɢɣ QueryInterface, _AddRef ɢ
_Release.
1.6. ɉɨɪɬɚɬɢɜɧɨɫɬɶ ɢ ɤɨɦɦɭɧɢɤɚɛɟɥɶɧɨɫɬɶ COM.
Ɋɟɝɢɫɬɪɚɰɢɹ COM-ɫɟɪɜɟɪɨɜ. ɋɢɫɬɟɦɧɵɣ ɪɟɟɫɬɪ Windows
ȿɳɺ ɨɞɧɨ ɝɥɚɜɧɨɟ ɩɪɚɜɢɥɨ COM-ɬɟɯɧɨɥɨɝɢɢ – ɨɬɫɭɬɫɬɜɢɟ ɤɨɧɬɟɤɫɬ-
ɧɨɣ ɡɚɜɢɫɢɦɨɫɬɢ ɤɥɢɟɧɬɚ ɢ ɫɟɪɜɟɪɚ. ɉɨɞ ɤɨɧɬɟɤɫɬɧɨɣ ɧɟɡɚɜɢɫɢɦɨɫɬɶɸ
ɩɨɞɪɚɡɭɦɟɜɚɟɬɫɹ, ɱɬɨ ɤɥɢɟɧɬ ɞɨɥɠɟɧ ɩɨɥɭɱɢɬɶ ɫɜɹɡɶ ɫ ɫɟɪɜɟɪɨɦ, ɝɞɟ ɛɵ ɨɧ
ɧɢ ɧɚɯɨɞɢɥɫɹ.
ɋɜɹɡɶ ɤɥɢɟɧɬɚ ɫ ɫɟɪɜɟɪɨɦ ɛɟɪɺɬ ɧɚ ɫɟɛɹ ɨɩɟɪɚɰɢɨɧɧɚɹ ɫɢɫɬɟɦɚ, ɤɨɬɨ-
ɪɚɹ ɫɨɞɟɪɠɢɬ ɫɢɫɬɟɦɧɭɸ ɛɚɡɭ ɞɚɧɧɵɯ, ɧɚɡɵɜɚɟɦɭɸ ɫɢɫɬɟɦɧɵɦ ɪɟɟɫɬ-
ɪɨɦ, ɝɞɟ ɩɪɨɩɢɫɵɜɚɟɬɫɹ ɧɚɡɜɚɧɢɟ COM-ɫɟɪɜɟɪɚ, ɭɧɢɤɚɥɶɧɵɣ ɧɨɦɟɪ ɤɨɦ-
ɩɨɧɟɧɬɚ CLSID ɢ ɞɪɭɝɚɹ ɢɧɮɨɪɦɚɰɢɹ.
ɉɪɢɦɟɱɚɧɢɟ 1.4.
Ɋɟɟɫɬɪ ɫɨɞɟɪɠɢɬ ɢɧɮɨɪɦɚɰɢɸ ɨɛ ɚɩɩɚɪɚɬɧɨɦ ɢ
ɩɪɨɝɪɚɦɦɧɨɦ ɨɛɟɫɩɟɱɟɧɢɢ, ɨ ɤɨɧɮɢɝɭɪɚɰɢɢ ɤɨɦɩɶɸɬɟɪɚ ɢ ɨ ɩɨɥɶɡɨɜɚɬɟ-
ɥɹɯ. Ʌɸɛɚɹ ɩɪɨɝɪɚɦɦɚ ɞɥɹ Windows ɦɨɠɟɬ ɞɨɛɚɜɥɹɬɶ ɢ ɫɱɢɬɵɜɚɬɶ ɢɧ-
ɮɨɪɦɚɰɢɸ ɢɡ ɪɟɟɫɬɪɚ.
Ɋɟɟɫɬɪ ɢɦɟɟɬ ɢɟɪɚɪɯɢɱɟɫɤɭɸ ɫɬɪɭɤɬɭɪɭ ɜ ɜɢɞɟ ɞɟɪɟɜɚ, ɝɞɟ ɭɡɥɚɦɢ ɹɜ-
ɥɹɸɬɫɹ ɪɚɡɞɟɥɵ, ɚ ɥɢɫɬɶɹɦɢ – ɞɚɧɧɵɟ.
Ⱦɥɹ ɩɪɨɫɦɨɬɪɚ ɢ ɪɟɞɚɤɬɢɪɨɜɚɧɢɹ ɪɟɟɫɬɪɚ ɦɨɠɧɨ ɢɫɩɨɥɶɡɨɜɚɬɶ ɫɬɚɧ-
ɞɚɪɬɧɭɸ ɩɪɨɝɪɚɦɦɭ regedit.exe – ɪɟɞɚɤɬɨɪ ɪɟɟɫɬɪɚ (ɪɢɫ. 1.3).
Ɋɢɫ. 1.3. Ɋɟɞɚɤɬɨɪ ɪɟɟɫɬɪɚ
12
FRefCount: integer; 1.6. ������������� � ������������������ COM. <���������� �������� �����> ����������� COM-��������. ��������� ������ Windows public ��� ���� ������� ������� COM-���������� – ���������� ��������- //�������� ���������� IUnknown ��� ����������� ������� � �������. ��� ����������� �������������� function QueryInterface(const IID:TGUID; out obj):HResult; ���������������, ��� ������ ������ �������� ����� � ��������, ��� �� �� stdcall; �� ���������. function _AddRef: Integer; stdcall; ����� ������� � �������� ����� �� ���� ������������ �������, ����- function _Release: Integer; stdcall; ��� �������� ��������� ���� ������, ���������� ��������� �����- <�������� �������� �����> ���, ��� ������������� �������� COM-�������, ���������� ����� ���- ������� CLSID � ������ ����������. end; ���������� 1.4. ������ �������� ���������� �� ���������� � <…………> ����������� �����������, � ������������ ���������� � � ����������- function TSomeObject. QueryInterface(const IID:TGUID; out ���. ����� ��������� ��� Windows ����� ��������� � ��������� ��- obj):HResult; �������� �� �������. begin if GetInterface(IID, Obj) then ������ ����� ������������� ��������� � ���� ������, ��� ������ ��- begin ������ �������, � �������� – ������. Result:=S_OK; ��� ��������� � �������������� ������� ����� ������������ ����- _AddRef; ������� ��������� regedit.exe – �������� ������� (���. 1.3). end else Result:=E_NOINTERFACE; end; function TSomeObject._AddRef: Integer; begin Inc(FRefCount); Result:=FRefCount; end; function TSomeObject._Release: Integer; begin Dec(FRefCount); Result:=FRefCount; if FRefCount=0 then destroy; end; <…………> � ������� ������ ������ TSomeObject, �������������� ��������� ISomeInterface, � �������� ���������� ������� QueryInterface, _AddRef � ���. 1.3. �������� ������� _Release. 11 12
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »