ВУЗ:
Составители:
2) ɧɟ ɬɪɟɛɭɟɬɫɹ ɢɦɩɨɪɬɢɪɨɜɚɬɶ ɢ ɩɨɞɤɥɸɱɚɬɶ ɩɪɨɝɪɚɦɦɧɵɣ ɦɨɞɭɥɶ ɫ
ɨɩɢɫɚɧɢɟɦ ɢɧɬɟɪɮɟɣɫɨɜ ɢ ɬɢɩɨɜ ɞɚɧɧɵɯ, ɩɪɢɦɟɧɹɟɦɵɯ ɤɨɦɩɨɧɟɧ-
ɬɨɦ;
3) ɜ ɧɟɤɨɬɨɪɵɯ ɦɟɬɨɞɚɯ ɤɨɦɩɨɧɟɧɬɨɜ ɩɚɪɚɦɟɬɪɵ ɨɩɪɟɞɟɥɟɧɵ ɩɨ ɭɦɨɥ-
ɱɚɧɢɸ, ɧɨ ɩɪɢ ɪɚɧɧɟɦ ɫɜɹɡɵɜɚɧɢɢ ɤɨɦɩɢɥɹɬɨɪ Delphi ɧɟ ɞɨɩɭɫɬɢɬ
ɜɨɡɦɨɠɧɨɫɬɢ «ɨɩɭɫɬɢɬɶ» ɞɚɧɧɵɟ ɩɚɪɚɦɟɬɪɵ. ɇɚɩɪɢɦɟɪ, ɩɭɫɬɶ ɟɫɬɶ
ɩɟɪɟɦɟɧɧɚɹ Word, ɜ ɤɨɬɨɪɨɣ ɯɪɚɧɢɬɫɹ ɭɤɚɡɚɬɟɥɶ ɧɚ ɤɨɦɩɨɧɟɧɬ Mi-
crosoft Word. ɑɬɨɛɵ ɫɨɡɞɚɬɶ ɧɨɜɵɣ ɞɨɤɭɦɟɧɬ ɩɪɢ ɩɨɡɞɧɟɦ ɫɜɹɡɵɜɚ-
ɧɢɢ, ɞɨɫɬɚɬɨɱɧɨ ɧɚɩɢɫɚɬɶ ɨɩɟɪɚɬɨɪ:
Word.Documents.Add
ɉɪɢ ɪɚɧɧɟɦ ɫɜɹɡɵɜɚɧɢɢ ɩɪɢɞɟɬɫɹ ɜɵɡɵɜɚɬɶ ɞɚɧɧɭɸ ɮɭɧɤɰɢɸ ɫ ɩɚ-
ɪɚɦɟɬɪɚɦɢ:
Word.Documents.Add(Template, NewTemplate, DocumentType, Visi-
ble).
5.2. ɂɧɬɟɪɮɟɣɫɵ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ
Ɇɟɯɚɧɢɡɦ ɩɨɡɞɧɟɝɨ ɫɜɹɡɵɜɚɧɢɹ ɪɟɚɥɢɡɭɟɬɫɹ ɜ ɫɚɦɢɯ ɤɨɦɩɨɧɟɧɬɚɯ
ɚɜɬɨɦɚɬɢɡɚɰɢɢ, ɤɨɬɨɪɵɟ ɨɛɹɡɚɧɵ ɩɨɞɞɟɪɠɢɜɚɬɶ ɢɧɬɟɪɮɟɣɫ IDispatch:
IDispatch = interface(IUnknown)
['{00020400-0000-0000-C000-000000000046}']
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRe-
sult; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer; Name-
Count, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Inte-
ger; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer):
HResult; stdcall;
end;
ɉɪɢ ɨɛɪɚɳɟɧɢɢ ɤ ɦɟɬɨɞɭ ɢɧɬɟɪɮɟɣɫɚ ɤɨɦɩɨɧɟɧɬɚ ɜ ɦɟɬɨɞɟ ɩɨɡɞɧɟɝɨ
ɫɜɹɡɵɜɚɧɢɹ ɜɵɩɨɥɧɹɸɬɫɹ ɫɥɟɞɭɸɳɢɟ ɞɟɣɫɬɜɢɹ:
1) ɢɦɹ ɜɵɡɵɜɚɟɦɨɣ ɩɪɨɰɟɞɭɪɵ ɩɟɪɟɞɚɟɬɫɹ ɜ ɦɟɬɨɞ GetIDsOfNames,
ɤɨɬɨɪɚɹ ɜɨɡɜɪɚɳɚɟɬ ɱɢɫɥɨɜɨɣ ɢɞɟɧɬɢɮɢɤɚɬɨɪ, ɨɞɧɨɡɧɚɱɧɨ ɫɨɨɬ-
ɜɟɬɫɬɜɭɸɳɢɣ ɢɦɟɧɢ ɦɟɬɨɞɚ ɫɟɪɜɟɪɚ;
2) ɱɢɫɥɨɜɨɣ ɢɞɟɧɬɢɮɢɤɚɬɨɪ ɩɟɪɟɞɚɟɬɫɹ ɜ Invoke ɞɥɹ ɩɨɥɭɱɟɧɢɹ ɚɞɪɟ-
ɫɚ ɧɚ ɜɵɡɵɜɚɟɦɵɣ ɦɟɬɨɞ ɢɧɬɟɪɮɟɣɫɚ.
45
ɉɪɨɦɟɠɭɬɨɱɧɵɦ ɡɜɟɧɨɦ ɦɟɠɞɭ ɢɧɬɟɪɮɟɣɫɚɦɢ ɢ ɩɟɪɟɦɟɧɧɵɦɢ ɬɢɩɚ
Variant ɹɜɥɹɸɬɫɹ ɢɧɬɟɪɮɟɣɫɵ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ (dispinterface). ɂɧɬɟɪ-
ɮɟɣɫɵ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ ɨɩɢɫɵɜɚɸɬɫɹ ɩɨɱɬɢ ɬɚɤ ɠɟ, ɤɚɤ ɢ ɨɛɵɱɧɵɟ ɢɧ-
ɬɟɪɮɟɣɫɵ:
IMyInterfase=interface(IDispatch)
[<IID ɢɧɬɟɪɮɟɣɫɚ>]
{<ɦɟɬɨɞ ɢɧɬɟɪɮɟɣɫɚ>; safecall;}
end;
IMyInterfaseDisp=dispinterface
[<IID ɢɧɬɟɪɮɟɣɫɚ>]
{<ɦɟɬɨɞ ɢɧɬɟɪɮɟɣɫɚ>; dispid <ɱɢɫɥɨɜɨɣ ɢɞɟɧɬɢɮɢɤɚɬɨɪ ɦɟ-
ɬɨɞɚ>;}
end;
IID ɢɧɬɟɪɮɟɣɫɚ IMyInterface ɢ IMyInterfaceDisp ɨɛɹɡɚɬɟɥɶɧɨ ɞɨɥɠɧɵ
ɛɵɬɶ ɨɞɢɧɚɤɨɜɵɦɢ. Ɇɟɬɨɞɵ ɭ IMyInterfaceDisp ɹɜɥɹɸɬɫɹ ɨɬɨɛɪɚɠɟɧɢɟɦ
ɦɟɬɨɞɨɜ IMyInterface, ɧɨ ɜɦɟɫɬɨ safecall ɢɫɩɨɥɶɡɭɟɬɫɹ dispid ɞɥɹ ɬɨɝɨ,
ɱɬɨɛɵ ɡɚɞɚɬɶ ɦɟɬɨɞɭ ɫɨɛɫɬɜɟɧɧɵɣ ɱɢɫɥɨɜɨɣ ɢɞɟɧɬɢɮɢɤɚɬɨɪ.
ȼɫɟ ɦɟɬɨɞɵ ɫɟɪɜɟɪɚ ɚɜɬɨɦɚɬɢɡɚɰɢɢ ɞɨɥɠɧɵ ɜɨɡɜɪɚɳɚɬɶ ɡɧɚɱɟɧɢɟ ɬɢ-
ɩɚ HResult. ȼɨɡɜɪɚɳɚɟɦɨɟ ɡɧɚɱɟɧɢɟ ɹɜɥɹɟɬɫɹ ɢɧɞɢɤɚɬɨɪɨɦ, ɧɨɪɦɚɥɶɧɨ ɥɢ
ɡɚɜɟɪɲɢɥ ɦɟɬɨɞ ɡɚɩɪɨɝɪɚɦɦɢɪɨɜɚɧɧɭɸ ɜ ɧɟɦ ɨɩɟɪɚɰɢɸ, ɢɥɢ ɜɵɩɨɥɧɢɬɶ
ɟɟ ɧɟ ɭɞɚɥɨɫɶ. Ⱦɪɭɝɢɟ ɞɚɧɧɵɟ, ɩɨɥɭɱɟɧɧɵɟ ɜ ɪɟɡɭɥɶɬɚɬɟ ɪɚɛɨɬɵ ɮɭɧɤɰɢɢ,
ɜɨɡɜɪɚɳɚɸɬɫɹ ɱɟɪɟɡ ɩɚɪɚɦɟɬɪɵ ɫ ɦɨɞɢɮɢɤɚɬɨɪɨɦ out. Ⱦɢɪɟɤɬɢɜɚ safecall
ɢɧɫɬɪɭɤɬɢɪɭɟɬ ɤɨɦɩɢɥɹɬɨɪ Delphi ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɫɨɡɞɚɬɶ ɜɨɤɪɭɝ ɜɫɟɯ ɦɟ-
ɬɨɞɨɜ ɫɜɨɟɝɨ ɪɨɞɚ ɨɛɨɥɨɱɤɭ ɜ ɜɢɞɟ ɤɨɧɫɬɪɭɤɰɢɢ try-except. Ⱦɚɧɧɵɟ ɫɨ-
ɝɥɚɲɟɧɢɹ ɜ Delphi ɨɩɪɟɞɟɥɟɧɵ ɩɨ ɭɦɨɥɱɚɧɢɸ, ɩɨɷɬɨɦɭ ɩɪɢ ɨɛɪɚɳɟɧɢɢ
ɢɥɢ ɪɟɚɥɢɡɚɰɢɢ ɤɨɦɩɨɧɟɧɬɚ ɚɜɬɨɦɚɬɢɡɚɰɢɢ ɦɟɬɨɞɵ ɟɝɨ ɢɧɬɟɪɮɟɣɫɨɜ ɜɵ-
ɝɥɹɞɹɬ ɤɚɤ ɨɛɵɱɧɵɟ ɦɟɬɨɞɵ
. ɇɚɩɪɢɦɟɪ:
//Ɍɚɤ ɞɨɥɠɟɧ ɜɵɝɥɹɞɟɬɶ ɦɟɬɨɞ ɢɧɬ-ɫɚ, ɩɪɨɢɡɜɨɞɧɨɝɨ ɨɬ IDspatch
function MyMethod(out param: <ɬɢɩ ɩɟɪɟɦɟɧɧɨɣ>): HResult; stdcall;
//Ɍɚɤ ɦɟɬɨɞ ɢɧɬ-ɫɚ, ɩɪɨɢɡɜɨɞɧɨɝɨ ɨɬ IDspatch, ɪɟɚɥɢɡɨɜɚɧ ɜ Delphi
function MyMethod: <ɬɢɩ ɩɟɪɟɦɟɧɧɨɣ>;
ȼ ɢɧɬɟɪɮɟɣɫɚɯ, ɩɨɞɞɟɪɠɢɜɚɸɳɢɯ IDispatch, ɦɨɠɧɨ ɡɚɞɚɜɚɬɶ ɧɟ ɬɨɥɶ-
ɤɨ ɦɟɬɨɞɵ, ɧɨ ɢ ɫɜɨɣɫɬɜɚ. ɋɜɨɣɫɬɜɚ ɩɨɯɨɠɢ ɧɚ ɩɟɪɟɦɟɧɧɵɟ, ɧɨ ɞɥɹ ɜɜɨɞɚ
ɢ ɜɵɜɨɞɚ ɞɚɧɧɵɯ ɜ ɫɜɨɣɫɬɜɚɯ ɢɫɩɨɥɶɡɭɸɬɫɹ ɮɭɧɤɰɢɢ, ɧɚɡɜɚɧɢɹ ɤɨɬɨɪɵɯ
ɨɛɵɱɧɨ ɧɚɱɢɧɚɸɬɫɹ ɫ ɩɪɟɮɢɤɫɨɜ Get_ (ɞɥɹ ɫɱɢɬɵɜɚɧɢɹ) ɢ Set_ (ɞɥɹ ɡɚɩɢ-
ɫɢ) ɫɨɨɬɜɟɬɫɬɜɟɧɧɨ. ɋɜɨɣɫɬɜɚ ɦɨɝɭɬ ɛɵɬɶ ɞɨɫɬɭɩɧɵ ɧɟ ɬɨɥɶɤɨ ɧɚ ɱɬɟɧɢɟ ɢ
ɡɚɩɢɫɶ ɨɞɧɨɜɪɟɦɟɧɧɨ, ɧɨ ɢ ɬɨɥɶɤɨ ɧɚ ɱɬɟɧɢɟ ɢɥɢ ɬɨɥɶɤɨ ɧɚ ɡɚɩɢɫɶ. ɉɪɨ-
ɰɟɞɭɪɵ Get_ ɢ Set_, ɫɨɨɬɜɟɬɫɬɜɭɸɳɢɟ ɫɜɨɣɫɬɜɭ, ɨɫɬɚɸɬɫɹ ɞɨɫɬɭɩɧɵɦɢ
ɞɥɹ ɬɟɯ ɫɥɭɱɚɟɜ, ɤɨɝɞɚ ɜ ɤɚɤɨɦ-ɥɢɛɨ ɹɡɵɤɟ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɪɟɚɥɢɡɚɰɢɹ
ɫɜɨɣɫɬɜ ɧɟ ɩɨɞɞɟɪɠɢɜɚɟɬɫɹ.
46
2) �� ��������� ������������� � ���������� ����������� ������ � ������������� ������ ����� ������������ � ����������� ���� ��������� ����������� � ����� ������, ����������� ��������- Variant �������� ���������� ��������������� (dispinterface). �����- ���; ����� ��������������� ����������� ����� ��� ��, ��� � ������� ��- 3) � ��������� ������� ����������� ��������� ���������� �� ����- ��������: �����, �� ��� ������ ���������� ���������� Delphi �� �������� IMyInterfase=interface(IDispatch) ����������� «��������» ������ ���������. ��������, ����� ���� [] ���������� Word, � ������� �������� ��������� �� ��������� Mi- {<����� ����������>; safecall;} crosoft Word. ����� ������� ����� �������� ��� ������� �������- end; ���, ���������� �������� ��������: Word.Documents.Add IMyInterfaseDisp=dispinterface [ ] ��� ������ ���������� �������� �������� ������ ������� � ��- {<����� ����������>; dispid <�������� ������������� ��- ���������: ����>;} Word.Documents.Add(Template, NewTemplate, DocumentType, Visi- end; ble). IID ���������� IMyInterface � IMyInterfaceDisp ����������� ������ ���� �����������. ������ � IMyInterfaceDisp �������� ������������ 5.2. ���������� ��������������� ������� IMyInterface, �� ������ safecall ������������ dispid ��� ����, ����� ������ ������ ����������� �������� �������������. �������� �������� ���������� ����������� � ����� ����������� ��� ������ ������� ������������� ������ ���������� �������� ��- �������������, ������� ������� ������������ ��������� IDispatch: �� HResult. ������������ �������� �������� �����������, ��������� �� IDispatch = interface(IUnknown) �������� ����� ������������������� � ��� ��������, ��� ��������� �� �� �������. ������ ������, ���������� � ���������� ������ �������, ['{00020400-0000-0000-C000-000000000046}'] ������������ ����� ��������� � ������������� out. ��������� safecall function GetTypeInfoCount(out Count: Integer): HResult; stdcall; ������������� ���������� Delphi ������������� ������� ������ ���� ��- function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRe- ����� ������ ���� �������� � ���� ����������� try-except. ������ ��- sult; stdcall; �������� � Delphi ���������� �� ���������, ������� ��� ��������� ��� ���������� ���������� ������������� ������ ��� ����������� ��- function GetIDsOfNames(const IID: TGUID; Names: Pointer; Name- ������ ��� ������� ������. ��������: Count, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Inte- //��� ������ ��������� ����� ���-��, ������������ �� IDspatch ger; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): function MyMethod(out param: <��� ����������>): HResult; stdcall; HResult; stdcall; //��� ����� ���-��, ������������ �� IDspatch, ���������� � Delphi end; function MyMethod: <��� ����������>; ��� ��������� � ������ ���������� ���������� � ������ �������� � �����������, �������������� IDispatch, ����� �������� �� ����- ���������� ����������� ��������� ��������: �� ������, �� � ��������. �������� ������ �� ����������, �� ��� ����� 1) ��� ���������� ��������� ���������� � ����� GetIDsOfNames, � ������ ������ � ��������� ������������ �������, �������� ������� ������� ���������� �������� �������������, ���������� ����- ������ ���������� � ��������� Get_ (��� ����������) � Set_ (��� ����- ����������� ����� ������ �������; ��) ��������������. �������� ����� ���� �������� �� ������ �� ������ � 2) �������� ������������� ���������� � Invoke ��� ��������� ����- ������ ������������, �� � ������ �� ������ ��� ������ �� ������. ���- �� �� ���������� ����� ����������. ������ Get_ � Set_, ��������������� ��������, �������� ���������� ��� ��� �������, ����� � �����-���� ����� ���������������� ���������� ������� �� ��������������. 45 46
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »