Читаем О чём не пишут в книгах по Delphi полностью

Примечание

Несмотря на очень высокое качество разделов MSDN, относящихся к Window API, ошибки иногда бывают и там. Со временем их исправляют. Поэтому, если вы столкнулись с ситуацией, когда есть подозрение, что какая-либо функция Windows API ведёт себя не так, как это описано в вашей offline-справке, есть смысл заглянуть в online-справку — возможно, там уже появились дополнительные сведения по данной функции.

Рис. 1.3. Окно справки Delphi 2007 (функция DeleteObject)


Система Windows написана на C++, поэтому все описания функций Windows API, а также примеры их использования приведены на этом языке (это касается как MSDN, так и справки, поставляемой с Delphi). При этом, прежде всего, необходимо разобраться с типами данных. Большинство типов, имеющихся в Windows API. определены в Delphi. Соответствие между ними показано в табл. 1.1.


Таблица 1.1. Соответствие типов Delphi системным типам

Тип Windows APIТип Delphi
INT
INT
UINTLongWord
WORDWord
SHORTSmallInt
USHORTWord
CHARЧаще всего соответствует типу Char
, но может трактоваться также как ShortInt, т.к. в C++ нет разницы между символьным и целочисленным типами
UCHARЧаще всего соответствует типу Byte, но может трактоваться также как Char
DWORDLongWord
BYTEByte
WCHARWideChar
BOOL
LongBool
intInteger
longLongInt
shortSmallInt
unsigned intCardinal

Название типов указателей имеет префикс P или LP

(Pointer или Long Pointer, в 16-разрядных версиях Windows были короткие и длинные указатели. В 32-разрядных все указатели длинные, поэтому оба префикса имеют одинаковый смысл). Например, LPDWORD эквивалентен типу ^DWORD, PUCHAR^Byte. Иногда после префикса P или LP стоит еще префикс C — он означает, что это указатель на константу. В C++ возможно объявление таких указателей, которые указывают на константное содержимое, т.е. компилятор разрешает это содержимое читать, но не модифицировать. В Delphi такие указатели отсутствуют, и при портировании эти типы заменяются обычными указателями, т.е. префикс C игнорируется.

Типы PVOID и LPVOID соответствуют нетипизированным указателям (Pointer).

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже