LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe");
на Delphi будет выглядеть так:
var
lpszPipeName: PChar;
...
lpszPipeName:= '\\.\pipe\mynamedpipe';
Большинство названий типов из левой части табл. 1.1 в целях совместимости описаны в модуле Windows, поэтому они допустимы наравне с обычными типами Delphi. Кроме этих типов общего назначения существуют еще специальные. Например, дескриптор окна имеет тип HWND
, первый параметр сообщения — тип WPARAM
(в старых 16-разрядных Windows он был эквивалентен типу Word
, в 32-разрядных — LongInt
). Эти специальные типы также описаны в модуле Windows.
Записи ( record
) в C/C++ называются структурами и объявляются с помощью слова struct
. Из-за особенностей описания структур на языке С структуры в Windows API получают два имени: одно основное имя, составленное из главных букв, которое затем и используется, и одно вспомогательное, получающееся из основного добавлением префикса tag
. Начиная с четвертой версии Delphi приняты следующие правила именования таких типов: простое и вспомогательное имена остаются без изменений и еще добавляется новое имя, получающееся из основного присоединением общеупотребительного в Delphi префикса T
. Например, в функции CreatePenIndirect
одни из параметром имеет тип LOGPEN
. Это основное имя данного типа, а вспомогательное — tagLOGPEN
. Соответственно, в модуле Windows определена запись tagLOGPEN
и ее синонимы — LOGPEN
и TLogPen
. Эти три идентификатора в Delphi взаимозаменяемы. Вспомогательное имя встречается редко, программисты, в зависимости от личных предпочтений, выбирают либо основное имя типа, либо имя с префиксом T
.
Описанные здесь правила именования типов могут внести некоторую путаницу при использовании VCL. Например, для описания растра в Windows API определен тип BITMAP
(он же— tagBITMAP
). В Delphi соответствующий тип имеет еще одно имя — TBitmap
. Но такое же имя имеет класс TBitmap
, описанный в модуле Graphics
. В коде, который Delphi создает автоматически, модуль Graphics
находится в списке uses
после модуля Windows
, поэтому идентификатор TBitmap
воспринимается компилятором как Graphics.TBitmap
, а не как Windows.TBitmap
. Чтобы использовать Windows.ТBitmap
, нужно явно указать имя модуля или воспользоваться одним из альтернативных имен. В более ранних версиях Delphi
были другие правила именования типов. Например. в Delphi 2 существовал тип BITMAP
, но не было TBitmap
и tagBITMAP
, а в Delphi 3 из этих трех типов был только TBitmap
.
Все структуры в Windows API описаны без выравнивания, т.е. компилятор не вставляет между полями неиспользуемые байты, чтобы границы полей приходились на начало двойного или четверного слова, поэтому в Delphi для описания соответствующих структур предусмотрено слово packed
, запрещающее выравнивание.
При описании структур Windows API можно иногда встретить ключевое слово union
(см., например, структуру in_addr
). Объединение нескольких полей с помощью этого слова означает, что все они будут размещены по одному адресу. В Delphi это соответствует вариантным записям (т. е. использованию сазе в record). Объединения в C/C++ гибче, чем вариантные записи Delphi, т.к. позволяют размещать вариантную часть в любом месте структуры, а не только в конце. При переносе таких структур в Delphi иногда приходится вводить дополнительные типы.
Теперь рассмотрим синтаксис описания самой функции в C++ (листинг 1.1).
Листинг 1.1. Синтаксис описания функции на C++
<���Тип функции> <���Имя функции> ' ('
[<���Тип параметра> {<���Имя параметра>}
(',' <���Тип параметра> {<���Имя параметра>} }
]
')';
Как видно из листинга 1.1, при объявлении функции существует возможность указывать только типы параметров и не указывать их имена. Однако это считается устаревшим и применяется крайне редко (если не считать "параметров" типа VOID
, о которых написано далее).
Необходимо помнить, что в C/C++ различаются верхний и нижний регистры, поэтому HDC
, hdc
, hDC
и т.д. — это разные идентификаторы (автор С очень любил краткость и хотел, чтобы можно было делать не 26, а 52 переменные с именем из одной буквы). Поэтому часто можно встретить, что имя параметра и его тип совпадают с точностью до регистра. К счастью, при описании функции в Delphi мы не обязаны сохранять имена параметров, значение имеют лишь их типы и порядок следования. С учетом всего этого функция, описанная в справке как
Читать дальше
Конец ознакомительного отрывка
Купить книгу