О чём не пишут в книгах по Delphi - страница 6

Шрифт
Интервал

стр.

эквивалентен типу CHAR, для использующих Unicode — >WCHAR. В Delphi нет прямого аналога типу >TCHAR. Программист сам должен следить за тем, какой символьный тип требуется в данном месте. Строки в Windows API передаются как указатели на цепочку символов, завершающихся нулем. Поэтому указатель на >TCHAR может указывать как на единичный символ, так и на строку. Чтобы было легче разобраться, где какой указатель, в Windows API есть типы >LPTCHAR и >LPTSTR. Они эквивалентны друг другу, но первый принято использовать там, где требуется указатель на одиночный символ, а второй — на строку. Если строка передается в функцию только для чтения, обычно используют указатель на константу, т.е. тип >LPCTSTR. В Delphi это соответствует PChar для ANSI и PWideChar для Unicode. Здесь следует отметить особенность записи строковых литералов в языках C/C++. Символ \ в литерале имеет специальное значение: после него идет один или несколько управляющих символов. Например, \n означает перевод строки, \t — символ табуляции и т.п. В Delphi таких последовательностей нет, поэтому при переводе примеров из MSDN следует явно писать коды соответствующих символов. Например, литерал >"а\nb" в Delphi превращается в >'a\'#13'b'. После символа >\ может идти число — в этом случае оно трактуется как код символа, т.е. литерал >"a\0b9" в C/C++ эквивалентен литералу '>а'#0'b'#9 в Delphi. Если нужно, чтобы строковый литерал включал в себя сам символ \, его удваивают, т.е. литерал >"\\" в C++ соответствует >'\' в Delphi. Кроме того, в примерах кода, приведенных в MSDN, можно нередко увидеть, что строковые литералы обрабатываются макросами >TEXT или >_T, которые служат для унификации записи строковых литералов в кодировках ANSI и Unicode. При переводе такого кола на Delphi эти макросы можно просто опустить. С учетом сказанного такой, например, код (взят из примера использования Named pipes):

>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. Чтобы использовать


стр.

Похожие книги