ВУЗ:
Составители:
k:=m mod 16;
if k<10 then S:=chr(k+48)+S
else S:=chr(57+k)+S;
m:=m div 16;
until m=0;
Str:=WideString(S);
except
result:=false;
end;
end;
6. ɉɪɢɥɨɠɟɧɢɟ ɦɨɠɧɨ ɨɬɤɨɦɩɢɥɢɪɨɜɚɬɶ, ɧɚɠɚɜ ɫɨɱɟɬɚɧɢɟ ɤɥɚɜɢɲ
Ctrl+F9. ɋɨɡɞɚɧɧɵɣ ɩɪɢ ɷɬɨɦ COM-ɫɟɪɜɟɪ, ɧɚɯɨɞɹɳɢɣɫɹ ɜ ɛɢɛɥɢɨ-
ɬɟɤɟ Convert.dll, ɝɨɬɨɜ ɤ ɢɫɩɨɥɶɡɨɜɚɧɢɸ.
ȼ ɞɚɧɧɨɦ ɩɪɢɦɟɪɟ ɢɫɩɨɥɶɡɭɸɬɫɹ ɫɬɪɨɤɢ ɬɢɩɚ WideString. ɗɬɨ ɫɬɚɧ-
ɞɚɪɬɧɵɣ ɫɬɪɨɤɨɜɵɣ ɬɢɩ, ɢɫɩɨɥɶɡɭɟɦɵɣ ɜ ɬɟɯɧɨɥɨɝɢɢ COM. ȼ ɩɪɨɫɬɵɯ
ɫɬɪɨɤɚɯ (String, ShortString, PChar ɢɬ. ɩ.) ɫɢɦɜɨɥɵ ɢɦɟɸɬ ɪɚɡɦɟɪɧɨɫɬɶ
8 ɛɢɬ (1 ɛɚɣɬ), ɚɜ WideString – 16 ɛɢɬ (2 ɛɚɣɬɚ). ɗɬɨ ɞɚɟɬ ɜɨɡɦɨɠɧɨɫɬɶ ɩɟ-
ɪɟɞɚɱɢ ɫɬɪɨɤ ɜ ɤɨɞɢɪɨɜɤɟ Unicode.
2.8. ȼɧɟɲɧɢɟ COM-ɫɟɪɜɟɪɵ
ȼɧɟɲɧɢɟ COM-ɫɟɪɜɟɪɵ ɪɟɚɥɢɡɨɜɚɧɵ ɜ ɜɢɞɟ ɩɪɨɝɪɚɦɦ (exe-ɮɚɣɥɨɜ) ɢ
ɜ ɩɪɨɰɟɫɫɟ ɜɵɩɨɥɧɟɧɢɹ ɡɚɧɢɦɚɸɬ ɚɞɪɟɫɧɨɟ ɩɪɨɫɬɪɚɧɫɬɜɨ, ɨɬɥɢɱɧɨɟ ɨɬ
ɤɥɢɟɧɬɫɤɨɝɨ. ɗɬɨ ɩɪɢɜɨɞɢɬ ɤ ɧɟɤɨɬɨɪɵɦ ɧɸɚɧɫɚɦ ɩɪɢ ɫɨɡɞɚɧɢɢ ɬɚɤɨɝɨ
ɪɨɞɚ COM-ɫɟɪɜɟɪɨɜ.
ȼ ɨɬɥɢɱɢɟ ɨɬ ɜɫɬɪɨɟɧɧɵɯ, ɜɧɟɲɧɢɟ COM-ɫɟɪɜɟɪɵ ɧɟ ɷɤɫɩɨɪɬɢɪɭɸɬ
ɮɭɧɤɰɢɢ DllRegisterServer, DllUnregisterServer, DllGetClassObject ɢ
DllCanUnloadNow.
Ɍɚɤ ɤɚɤ ɤɥɢɟɧɬ ɢ ɜɧɟɲɧɢɣ COM-ɫɟɪɜɟɪ ɧɟ ɦɨɝɭɬ ɩɨɥɭɱɢɬɶ ɩɪɹɦɨɣ
ɞɨɫɬɭɩ ɤ ɚɞɪɟɫɧɨɦɭ ɩɪɨɫɬɪɚɧɫɬɜɭ ɞɪɭɝ ɞɪɭɝɚ, ɫɢɫɬɟɦɚ COM ɩɟɪɟɞɚɟɬ ɞɚɧ-
ɧɵɟ ɦɟɠɞɭ ɧɢɦɢ ɩɨɫɪɟɞɫɬɜɨɦ ɩɪɨɰɟɫɫɚ, ɧɚɡɵɜɚɟɦɨɝɨ ɦɚɪɲɚɥɢɧɝɨɦ
1
.
ɋɢɫɬɟɦɚ COM, ɪɟɚɥɢɡɨɜɚɧɧɚɹ ɜ ɨɩɟɪɚɰɢɨɧɧɨɣ ɫɢɫɬɟɦɟ Windows, ɦɨɠɟɬ
ɩɟɪɟɞɚɜɚɬɶ ɩɨɫɪɟɞɫɬɜɨɦ ɦɚɪɲɚɥɢɧɝɚ ɩɟɪɟɦɟɧɧɵɟ ɫɥɟɞɭɸɳɢɯ ɬɢɩɨɜ: Smal-
lint, Integer, Single, Double, Currency, TdateTime, WideString, IDispatch,
SCODE, WordBool, OleVariant, IUnknown, ShortInt, Byte, Word, UINT, int64,
Largeint, SYSINT, SYSUINT, HResult, Pointer, SafeArray, PChar, PWideChar.
ɋɥɟɞɭɟɬ ɨɬɦɟɬɢɬɶ, ɱɬɨ ɜɫɟ ɩɟɪɟɱɢɫɥɟɧɧɵɟ ɬɢɩɵ ɨɬɧɨɫɹɬɫɹ ɤ ɤɚɬɟɝɨ-
ɪɢɢ ɩɪɨɫɬɵɯ ɬɢɩɨɜ, ɬɚɤ ɤɚɤ ɦɚɪɲɚɥɢɧɝ ɩɟɪɟɦɟɧɧɵɯ ɫɥɨɠɧɵɯ ɬɢɩɨɜ (ɦɚɫ-
ɫɢɜɵ, ɡɚɩɢɫɢ, ɫɬɪɭɤɬɭɪɵ ɢ ɬ. ɩ.) ɫɢɫɬɟɦɚ COM ɧɟ ɩɨɞɞɟɪɠɢɜɚɟɬ. ȿɫɥɢ ɜɫɟ-
ɬɚɤɢ ɬɪɟɛɭɟɬɫɹ ɩɟɪɟɞɚɬɶ ɞɚɧɧɵɟ ɬɢɩɚ ɡɚɩɢɫɶ ɢɥɢ ɦɚɫɫɢɜ, ɧɭɠɧɨ ɫɚɦɨɫɬɨɹ-
ɬɟɥɶɧɨ ɡɚɩɪɨɝɪɚɦɦɢɪɨɜɚɬɶ ɩɨɞɞɟɪɠɤɭ ɦɟɯɚɧɢɡɦɚ ɦɚɪɲɚɥɢɧɝɚ ɞɥɹ ɬɚɤɢɯ
1
Ɉɬ ɫɥɨɜɚ Marshaling – ɜɵɫɬɪɚɢɜɚɧɢɟ ɜ ɨɩɪɟɞɟɥɟɧɧɨɦ ɩɨɪɹɞɤɟ.
27
ɫɬɪɭɤɬɭɪ. Ⱦɥɹ ɷɬɨɝɨ ɩɨɧɚɞɨɛɢɬɫɹ ɢɧɬɟɪɮɟɣɫ IMarshal. ȼ ɞɚɧɧɨɦ ɦɟɬɨɞɢ-
ɱɟɫɤɨɦ ɩɨɫɨɛɢɢ ɪɟɚɥɢɡɚɰɢɹ ɦɚɪɲɚɥɢɧɝɚ ɪɚɫɫɦɚɬɪɢɜɚɬɶɫɹ ɧɟ ɛɭɞɟɬ.
ȼɧɟɲɧɢɟ COM-ɫɟɪɜɟɪɵ, ɤɚɤ ɢ ɨɛɵɱɧɵɟ ɩɪɢɥɨɠɟɧɢɹ, ɦɨɠɧɨ ɡɚɤɪɵɬɶ
ɫɚɦɨɫɬɨɹɬɟɥɶɧɨ, ɧɨ ɟɫɥɢ ɧɚ ɤɨɦɩɨɧɟɧɬɵ ɫɟɪɜɟɪɚ ɫɫɵɥɚɸɬɫɹ ɤɥɢɟɧɬɵ, ɬɨ
ɫɢɫɬɟɦɚ ɜɵɞɚɟɬ ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɟ ɫɨɨɛɳɟɧɢɟ (ɪɢɫ. 2.3).
Ɋɢɫ. 2.3. ɉɪɟɞɭɩɪɟɠɞɟɧɢɟ, ɜɵɡɵɜɚɟɦɨɟ ɩɪɢ ɡɚɤɪɵɬɢɢ ɜɧɟɲɧɟɝɨ
COM-ɤɥɢɟɧɬɚ, ɟɫɥɢ ɧɚ ɤɨɦɩɨɧɟɧɬɵ ɫɟɪɜɟɪɚ ɫɫɵɥɚɸɬɫɹ ɤɥɢɟɧɬɵ
ɉɪɢɦɟɪ ɜɧɟɲɧɟɝɨ COM-ɫɟɪɜɟɪɚ ɛɭɞɟɬ ɩɪɢɜɟɞɟɧ ɜ ɩɹɬɨɣ ɝɥɚɜɟ, ɬɚɤ
ɤɚɤ ɞɥɹ ɪɟɚɥɢɡɚɰɢɢ ɬɚɤɢɯ ɫɟɪɜɟɪɨɜ ɬɪɟɛɭɟɬɫɹ ɛɢɛɥɢɨɬɟɤɚ ɬɢɩɨɜ, ɤɨɬɨɪɚɹ
ɛɭɞɟɬ ɪɚɫɫɦɨɬɪɟɧɚ ɜ ɝɥ. III.
2.9. Ȼɟɡɨɩɚɫɧɵɟ ɦɚɫɫɢɜɵ (SafeArray)
Ȼɟɡɨɩɚɫɧɵɟ ɦɚɫɫɢɜɵ (ɬɢɩ SafeArray) ɪɟɚɥɢɡɨɜɚɧɵ ɧɚ ɨɫɧɨɜɟ ɜɚɪɢɚɧɬ-
ɧɵɯ ɦɚɫɫɢɜɨɜ. ɉɪɨɰɟɞɭɪɵ ɢ ɮɭɧɤɰɢɢ ɞɥɹ ɪɚɛɨɬɵ ɫ ɜɚɪɢɚɧɬɧɵɦɢ ɦɚɫɫɢ-
ɜɚɦɢ ɩɪɢɜɟɞɟɧɵ ɜ ɫɥɟɞɭɸɳɟɣ ɬɚɛɥɢɰɟ.
ɉɨɞɩɪɨɝɪɚɦɦɚ Ɉɩɢɫɚɧɢɟ
ɋɨɡɞɚɟɬ ɜɚɪɢɚɧɬɧɵɣ ɦɚɫɫɢɜ.
ɉɚɪɚɦɟɬɪ Bounds ɫɨɞɟɪɠɢɬ
ɪɚɡɦɟɪɧɨɫɬɶ ɦɚɫɫɢɜɚ. ɉɚɪɚ-
ɦɟɬɪ VarType ɨɩɪɟɞɟɥɹɟɬ
ɬɢɩ ɯɪɚɧɢɦɵɯ ɞɚɧɧɵɯ
function VarArrayCreate(const Bounds: ar-
ray of Integer; VarType: TVarType): Vari-
ant;
ɋɨɡɞɚɟɬ ɨɞɧɨɦɟɪɧɵɣ
ɜɚɪɢɚɧɬɧɵɣ ɦɚɫɫɢɜ ɢɡ
ɷɥɟɦɟɧɬɨɜ Values.
ɂɧɞɟɤɫɚɰɢɹ
function VarArrayOf(const Values: array
of Variant): Variant;
ɧɚɱɢɧɚɟɬɫɹ ɫ
ɧɭɥɹ
ȼɨɡɜɪɚɳɚɟɬ ɫɫɵɥɤɭ ɧɚ ɜɚɪɢ-
ɚɧɬɧɵɣ ɦɚɫɫɢɜ
function VarArrayRef(const A: Variant):
Variant;
function VarArrayDimCount(const A:
Variant): Integer;
ȼɨɡɜɪɚɳɚɟɬ ɤɨɥɢɱɟɫɬɜɨ ɢɡ-
ɦɟɪɟɧɢɣ ɜ ɜɚɪɢɚɧɬɧɨɦ ɦɚɫ-
ɫɢɜɟ ȼ ɫɥɭɱɚɟ, ɟɫɥɢ ɷɬɨ ɧɟ
ɦɚɫɫɢɜ, ɜɨɡɜɪɚɳɚɟɬ 0
28
k:=m mod 16; ��������. ��� ����� ����������� ��������� IMarshal. � ������ ������- if k<10 then S:=chr(k+48)+S ������ ������� ���������� ���������� ��������������� �� �����. else S:=chr(57+k)+S; ������� COM-�������, ��� � ������� ����������, ����� ������� m:=m div 16; ��������������, �� ���� �� ���������� ������� ��������� �������, �� until m=0; ������� ������ ��������������� ��������� (���. 2.3). Str:=WideString(S); except result:=false; end; end; 6. ���������� ����� ���������������, ����� ��������� ������ Ctrl+F9. ��������� ��� ���� COM-������, ����������� � ������- ���� Convert.dll, ����� � �������������. � ������ ������� ������������ ������ ���� WideString. ��� ����- ���. 2.3. ��������������, ���������� ��� �������� �������� ������� ��������� ���, ������������ � ���������� COM. � ������� COM-�������, ���� �� ���������� ������� ��������� ������� ������� (String, ShortString, PChar � �. �.) ������� ����� ����������� 8 ��� (1 ����), � � WideString – 16 ��� (2 �����). ��� ���� ����������� ��- ������ �������� COM-������� ����� �������� � ����� �����, ��� ������ ����� � ��������� Unicode. ��� ��� ���������� ����� �������� ��������� ���������� �����, ������� ����� ����������� � ��. III. 2.8. ������� COM-������� 2.9. ���������� ������� (SafeArray) ������� COM-������� ����������� � ���� �������� (exe-������) � � �������� ���������� �������� �������� ������������, �������� �� ���������� ������� (��� SafeArray) ����������� �� ������ �������- �����������. ��� �������� � ��������� ������� ��� �������� ������ ��� ��������. ��������� � ������� ��� ������ � ����������� �����- ���� COM-��������. ���� ��������� � ��������� �������. � ������� �� ����������, ������� COM-������� �� ������������ ������������ �������� ������� DllRegisterServer, DllUnregisterServer, DllGetClassObject � function VarArrayCreate(const Bounds: ar- ������� ���������� ������. DllCanUnloadNow. ��� ��� ������ � ������� COM-������ �� ����� �������� ������ ray of Integer; VarType: TVarType): Vari- �������� Bounds �������� ant; ����������� �������. ����- ������ � ��������� ������������ ���� �����, ������� COM �������� ���- ���� VarType ���������� ��� ����� ���� ����������� ��������, ����������� ����������� 1 . ��� �������� ������ ������� COM, ������������� � ������������ ������� Windows, ����� ���������� ����������� ���������� ���������� ��������� �����: Smal- function VarArrayOf(const Values: array ������� ���������� lint, Integer, Single, Double, Currency, TdateTime, WideString, IDispatch, of Variant): Variant; ���������� ������ �� SCODE, WordBool, OleVariant, IUnknown, ShortInt, Byte, Word, UINT, int64, ��������� Values. Largeint, SYSINT, SYSUINT, HResult, Pointer, SafeArray, PChar, PWideChar. ���������� ���������� � ������� ��������, ��� ��� ������������� ���� ��������� � ������- function VarArrayRef(const A: Variant): ���� ���������� ������ �� ����- ��� ������� �����, ��� ��� ��������� ���������� ������� ����� (���- Variant; ������ ������ ����, ������, ��������� � �. �.) ������� COM �� ������������. ���� ���- ���������� ���������� ��- ���� ��������� �������� ������ ���� ������ ��� ������, ����� ��������- function VarArrayDimCount(const A: ������� � ���������� ���- ������ ����������������� ��������� ��������� ���������� ��� ����� Variant): Integer; ���� � ������, ���� ��� �� 1 ������, ���������� 0 �� ����� Marshaling – ������������ � ������������ �������. 27 28
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »