Синтаксис функций Windows API
Большая часть функций API уже импортирована в среду Delphi и описана в ее модулях, их вызов практически ничем не отличается от вызова любых других функций Delphi. Если же функция отсутствует в Delphi, то ее можно импортировать из соответствующей DLL с помощью существующего механизма импорта функций (см. разд. "Импортирование функций Windows API" в данной главе). Так как система Windows написана на Си, то все описания функций Windows API даны в DLL на языке С, а не на языке Pascal. Для перевода функции в Delphi необходимо знать синтаксис описания функций в языке Си.
Описание функции в Си имеет вид:
<Тип функции> <Имя функции>(<Тип параметра> <Имя параметра>,
<Тип параметра> <Имя параметра>, ...);
В Си различаются верхний и нижний регистр, и идентификаторы HDC, hdc, hDC — для Си являются разными. Поэтому часто можно встретить фразу о том, что имя параметра и его тип совпадают с точностью до регистра. Конечно, в Pascal это уже не имеет значения.
Например, в Си функция:
HMETAFILE CopyMetaFile(HMETAFILE hmfSrc, LPCTSTR IpszFile); в Delphi может иметь вид:
function CopyMetaFile(hmfSrc: HMETAFILE; IpszFile: LPCTSTR : HMETAFILE; или
function CopyMetaFile(hmfSrc: HMetaFile; IpszFile: PChar): HMetaFile;
Некоторое отличие имеет тип void. Если функция указан тип void , то в языке Pascal такая функция была бы описана как процедур. Если вместо параметров у функции в скобках стоит void, это означает, что функция не имеет параметров. Например, Си-функция:
VOID CloseLogFile(VOID); в Delphi описывается как:
procedure CloseLogFile;
Примечание
Не путайте void и pvoid. pvoid — это нетипизированный указатель, соответствующий типу Pointer.
В тех случаях, когда тип параметра является указателем на другой тип (обычно начинается с букв LP), при описании этой функции в Delphi можно пользоваться параметром-переменной, т. к. функции передается указатель. Например, функция:
int GetRgnBox(HRGN hrgn, LPRECT lprc);
в файле Windows.pas описана так:
function GetRgnBox(RGN: HRGN; var p2: TRect): Integer;
Комментарии (0)