ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »
