ВУЗ:
Составители:
21
Fobj1: IInterface1;
protected
property Intf: IInterface1 read FObj1 implements IInterface1;
procedure DoIt2;
constructor Create;
destructor Destroy;override;
end;
implemetation
{TObject1}
procedure TObject1.DoIt1;
begin
<…………………>
end;
constructor TCombinedObject.Create;
begin
inherited;
FObj1:=TObject1.Create;
end;
destructor TCombinedObject.Destroy;
begin
FObj1:=nil;
inherited;
end;
procedure TCombinedObject.DoIt2;
begin
<…………………>
end;
ɉɭɫɬɶ ɜ ɩɪɨɝɪɚɦɦɟ, ɢɫɩɨɥɶɡɭɸɳɟɣ ɤɨɦɩɨɧɟɧɬ TCombinedObject, ɟɫɬɶ
ɩɟɪɟɦɟɧɧɚɹ I2 – ɫɫɵɥɤɚ ɧɚ ɢɧɬɟɪɮɟɣɫ IInterface2. ɑɬɨɛɵ ɩɨɥɭɱɢɬɶ ɫɫɵɥɤɭ
ɧɚ IInterface1, ɢɫɩɨɥɶɡɭɟɬɫɹ ɨɩɟɪɚɬɨɪ as:
I1:=I2 as IInterface1;
ɉɪɢɦɟɱɚɧɢɟ 2.6.
Ʉɚɤ ɛɵɥɨ ɫɤɚɡɚɧɨ ɜ ɩ. 1.5, ɞɥɹ ɩɨɥɭɱɟɧɢɹ ɫɫɵɥɤɢ ɧɚ
ɞɪɭɝɨɣ ɩɨɞɞɟɪɠɢɜɚɟɦɵɣ ɢɧɬɟɪɮɟɣɫ ɧɭɠɧɨ ɢɫɩɨɥɶɡɨɜɚɬɶ ɮɭɧɤɰɢɸ Que-
ryInterface, ɧɨ ɜ Delphi ɞɚɧɧɚɹ ɨɩɟɪɚɰɢɹ ɪɟɚɥɢɡɨɜɚɧɚ ɫ ɩɨɦɨɳɶɸ ɨɩɟɪɚɬɨ-
ɪɚ as.
Ɉɛɴɟɤɬ TObject1 ɞɚɧɧɨɝɨ ɩɪɢɦɟɪɚ ɩɪɢɧɹɬɨ ɧɚɡɵɜɚɬɶ ɚɝɪɟɝɢɪɨɜɚɧɧɵɦ
(ɨɛɴɟɞɢɧɹɟɦɵɦ), ɚ ɨɛɴɟɤɬ, ɤɨɬɨɪɵɣ ɯɪɚɧɢɬ ɫɫɵɥɤɭ ɧɚ ɚɝɪɟɝɢɪɭɟɦɵɣ ɨɛɴ-
ɟɤɬ (TCombinedObject), ɧɚɡɵɜɚɸɬ ɤɨɧɬɟɣɧɟɪɨɦ.
ɉɪɢɦɟɱɚɧɢɟ 2.7.
Ɉɛɪɚɬɢɬɟ ɜɧɢɦɚɧɢɟ, ɱɬɨ ɢɡ ɢɧɬɟɪɮɟɣɫɚ ɚɝɪɟɝɢɪɨ-
ɜɚɧɧɨɝɨ ɨɛɴɟɤɬɚ ɧɟɥɶɡɹ ɩɨɥɭɱɢɬɶ ɫɫɵɥɤɭ ɧɚ ɤɨɧɬɟɣɧɟɪ. ɂɧɵɦɢ ɫɥɨɜɚɦɢ,
ɜɵɪɚɠɟɧɢɟ I2 as Interface1 ɜ ɧɚɲɟɦ ɩɪɢɦɟɪɟ ɫɝɟɧɟɪɢɪɭɟɬ ɨɲɢɛɤɭ.
2.6. Ƚɟɧɟɪɚɬɨɪ ɤɨɦɩɨɧɟɧɬɨɜ
Ⱦɥɹ ɩɨɪɨɠɞɟɧɢɹ ɧɨɜɨɝɨ ɷɤɡɟɦɩɥɹɪɚ ɤɨɦɩɨɧɟɧɬɚ, ɩɪɢ ɡɚɩɪɨɫɟ ɩɪɢɥɨ-
ɠɟɧɢɟɦ-ɤɥɢɟɧɬɨɦ, ɢɫɩɨɥɶɡɭɟɬɫɹ ɫɬɚɧɞɚɪɬɧɵɣ ɦɟɯɚɧɢɡɦ COM, ɧɚɡɜɚɧɧɵɣ
ɝɟɧɟɪɚɬɨɪɨɦ ɤɨɦɩɨɧɟɧɬɨɜ, ɢɥɢ ɮɚɛɪɢɤɨɣ ɤɥɚɫɫɚ. Ʌɸɛɨɣ ɤɨɦɩɨɧɟɧɬ ɢɦɟ-
ɟɬ ɚɫɫɨɰɢɢɪɨɜɚɧɧɵɣ ɫ ɧɢɦ ɝɟɧɟɪɚɬɨɪ ɤɨɦɩɨɧɟɧɬɨɜ, ɤɨɬɨɪɵɣ ɩɨɞɞɟɪɠɢɜɚ-
ɟɬ ɫɬɚɧɞɚɪɬɧɵɣ ɢɧɬɟɪɮɟɣɫ IClassFactory:
IClassFactory = interface(IUnknown)
['{00000001-0000-0000-C000-000000000046}']
function CreateInstance(const unkOuter: IUnknown; const iid: TIID;
out obj): HResult; stdcall;
function LockServer(fLock: BOOL): HResult; stdcall;
end;
Ɏɭɧɤɰɢɹ ɋreateInstance ɨɬɜɟɬɫɬɜɟɧɧɚ ɡɚ ɫɨɡɞɚɧɢɟ ɷɤɡɟɦɩɥɹɪɚ ɤɨɦɩɨ-
ɧɟɧɬɚ, ɧɚ ɤɨɬɨɪɵɣ ɫɫɵɥɚɟɬɫɹ ɝɟɧɟɪɚɬɨɪ ɤɨɦɩɨɧɟɧɬɨɜ. Ʉɚɤ ɩɪɚɜɢɥɨ, ɧɟɬ
ɧɟɨɛɯɨɞɢɦɨɫɬɢ ɜɵɡɵɜɚɬɶ ɞɚɧɧɭɸ ɮɭɧɤɰɢɸ ɫɚɦɨɫɬɨɹɬɟɥɶɧɨ, ɩɨɷɬɨɦɭ
ɩɨɞɪɨɛɧɨɟ ɨɩɢɫɚɧɢɟ ɩɚɪɚɦɟɬɪɨɜ ɜ ɞɚɧɧɨɦ ɦɟɬɨɞɢɱɟɫɤɨɦ ɩɨɫɨɛɢɢ ɪɚɫ-
ɫɦɚɬɪɢɜɚɬɶɫɹ ɧɟ ɛɭɞɟɬ.
LockServer ɢɫɩɨɥɶɡɭɟɬɫɹ ɫɢɫɬɟɦɨɣ ɞɥɹ ɩɨɞɫɱɟɬɚ ɫɫɵɥɨɤ ɨɛɪɚɳɟɧɢɣ ɤ
COM-ɫɟɪɜɟɪɭ. Ʉɨɝɞɚ ɩɪɢɥɨɠɟɧɢɟ ɡɚɩɪɚɲɢɜɚɟɬ ɤɨɦɩɨɧɟɧɬ, ɜ ɞɚɧɧɭɸ
ɮɭɧɤɰɢɸ ɩɟɪɟɞɚɟɬɫɹ ɩɚɪɚɦɟɬɪ true ɢ ɫɱɟɬɱɢɤ ɭɜɟɥɢɱɢɜɚɟɬɫɹ ɧɚ ɟɞɢɧɢɰɭ.
Ʉɨɝɞɚ COM-ɫɟɪɜɟɪ ɧɟ ɧɭɠɟɧ ɩɪɢɥɨɠɟɧɢɸ, ɜ LockServer ɩɟɪɟɞɚɟɬɫɹ ɩɚɪɚ-
ɦɟɬɪ false ɢ ɫɱɟɬɱɢɤ ɧɚ ɟɞɢɧɢɰɭ ɭɦɟɧɶɲɚɟɬɫɹ. ȼ ɫɥɭɱɚɟ ɨɛɧɭɥɟɧɢɹ ɫɱɟɬ-
ɱɢɤɚ COM-ɫɟɪɜɟɪ ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɜɵɝɪɭɠɚɟɬɫɹ.
ɉɪɢɦɟɱɚɧɢɟ 2.8.
Microsoft ɨɛɴɹɜɢɥɚ ɟɳɟ ɨɞɢɧ ɢɧɬɟɪɮɟɣɫ IClassFac-
tory2, ɤɨɬɨɪɵɣ ɞɨɛɚɜɥɹɟɬ ɤ IClassFactory ɩɨɞɞɟɪɠɤɭ ɥɢɰɟɧɡɢɪɨɜɚɧɢɹ ɢɥɢ
ɪɚɡɪɟɲɟɧɢɹ ɧɚ ɫɨɡɞɚɧɢɟ. Ʉɥɢɟɧɬ ɨɛɹɡɚɧ ɩɟɪɟɞɚɬɶ ɝɟɧɟɪɚɬɨɪɭ ɤɨɦɩɨɧɟɧ-
ɬɨɜ ɩɪɢ ɩɨɦɨɳɢ IClassFactory2 ɤɨɪɪɟɤɬɧɵɣ ɤɥɸɱ ɢɥɢ ɥɢɰɟɧɡɢɸ, ɩɪɟɠɞɟ
ɱɟɦ ɷɬɨɬ ɝɟɧɟɪɚɬɨɪ ɛɭɞɟɬ ɫɨɡɞɚɜɚɬɶ ɤɨɦɩɨɧɟɧɬɵ. [4]
22
Ʉɨɝɞɚ ɤɥɢɟɧɬ ɩɟɪɟɞɚɟɬ ɫɢɫɬɟɦɟ COM ɡɚɩɪɨɫ ɧɚ ɧɨɜɵɣ ɷɤɡɟɦɩɥɹɪ, ɫɧɚ-
ɱɚɥɚ ɢɳɟɬɫɹ ɢ ɡɚɝɪɭɠɚɟɬɫɹ (ɟɫɥɢ ɨɧ ɧɟ ɡɚɝɪɭɠɟɧ) COM-ɫɟɪɜɟɪ,
ɫɨɨɬɜɟɬɫɬɜɭɸɳɢɣ ɡɚɩɪɚɲɢɜɚɟɦɨɦɭ ɤɨɦɩɨɧɟɧɬɭ. Ɂɚɬɟɦ ɫɢɫɬɟɦɚ COM
ɩɨɞɤɥɸɱɚɟɬɫɹ ɤ ɮɚɛɪɢɤɟ ɤɨɦɩɨɧɟɧɬɨɜ ɱɟɪɟɡ ɢɧɬɟɪɮɟɣɫ COM, ɜɵɡɵɜɚɟɬ
ɫɨɨɬɜɟɬɫɬɜɭɸɳɭɸ ɮɭɧɤɰɢɸ CreateInstance ɢ ɩɟɪɟɞɚɟɬ ɤɥɢɟɧɬɭ
ɫɨɨɬɜɟɬɫɬɜɭɸɳɭɸ ɫɫɵɥɤɭ.
Fobj1: IInterface1; ������ TObject1 ������� ������� ������� �������� �������������� protected (������������), � ������, ������� ������ ������ �� ������������ ���- property Intf: IInterface1 read FObj1 implements IInterface1; ��� (TCombinedObject), �������� �����������. procedure DoIt2; ���������� 2.7. �������� ��������, ��� �� ���������� ��������- ������� ������� ������ �������� ������ �� ���������. ����� �������, constructor Create; ��������� I2 as Interface1 � ����� ������� ����������� ������. destructor Destroy;override; end; 2.6. ��������� ����������� implemetation ��� ���������� ������ ���������� ����������, ��� ������� �����- ������-��������, ������������ ����������� �������� COM, ��������� {TObject1} ����������� �����������, ��� �������� ������. ����� ��������� ���- procedure TObject1.DoIt1; �� ��������������� � ��� ��������� �����������, ������� ����������- begin �� ����������� ��������� IClassFactory: <…………………> IClassFactory = interface(IUnknown) end; ['{00000001-0000-0000-C000-000000000046}'] function CreateInstance(const unkOuter: IUnknown; const iid: TIID; constructor TCombinedObject.Create; out obj): HResult; stdcall; begin function LockServer(fLock: BOOL): HResult; stdcall; inherited; end; FObj1:=TObject1.Create; ������� �reateInstance ������������ �� �������� ���������� �����- end; �����, �� ������� ��������� ��������� �����������. ��� �������, ��� destructor TCombinedObject.Destroy; ������������� �������� ������ ������� ��������������, ������� begin ��������� �������� ���������� � ������ ������������ ������� ���- FObj1:=nil; ������������ �� �����. inherited; LockServer ������������ �������� ��� �������� ������ ��������� � end; COM-�������. ����� ���������� ����������� ���������, � ������ ������� ���������� �������� true � ������� ������������� �� �������. procedure TCombinedObject.DoIt2; ����� COM-������ �� ����� ����������, � LockServer ���������� ����- begin ���� false � ������� �� ������� �����������. � ������ ��������� ����- <…………………> ���� COM-������ ������������� �����������. end; ���������� 2.8. Microsoft �������� ��� ���� ��������� IClassFac- ����� � ���������, ������������ ��������� TCombinedObject, ���� tory2, ������� ��������� � IClassFactory ��������� �������������� ��� ���������� I2 – ������ �� ��������� IInterface2. ����� �������� ������ ���������� �� ��������. ������ ������ �������� ���������� ��������- �� IInterface1, ������������ �������� as: ��� ��� ������ IClassFactory2 ���������� ���� ��� ��������, ������ I1:=I2 as IInterface1; ��� ���� ��������� ����� ��������� ����������. [4] ���������� 2.6. ��� ���� ������� � �. 1.5, ��� ��������� ������ �� ����� ������ �������� ������� COM ������ �� ����� ���������, ���- ������ �������������� ��������� ����� ������������ ������� Que- ���� ������ � ����������� (���� �� �� ��������) COM-������, ryInterface, �� � Delphi ������ �������� ����������� � ������� �������- ��������������� �������������� ����������. ����� ������� COM �� as. ������������ � ������� ����������� ����� ��������� COM, �������� ��������������� ������� CreateInstance � �������� ������� ��������������� ������. 21 22
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »