14.10.2 cdecl

Вверх  Предыдущий  Следующий

Модификатор cdecl используют для объявления функции, которая использует соглашение о вызовах языка C. Его необходимо использовать при обращении к функциям, помещенных в объектный файл генерируемый с помощью стандартного компилятора C, которые нужно использовать и для подпрограмм Pascal, в качестве функций обратного вызова для стандартных библиотек C.

Модификатор cdecl позволяет использовать в коде функцию C. Внешние C функции, реализация которых содержит объектный файл, должны быть связаны. Как пример:

program CmodDemo;

{$LINKLIB c}

 

Const P : PChar = 'Это интересно!';

 

Function StrLen(P: PChar): Longint;cdecl; external name 'strlen';

begin

WriteLn ('Длина (',p,') : ',StrLen(p));

end.

При компиляции этого кода, и ссылки на С-библиотеки, функцию StrLen можно вызывать по всей программе. Директива external сообщает компилятору, что функция постоянно находится во внешнем объектном файле (или библиотеке) под именем strlen (смотри 14.8 Внешние (external) функции).

Примечание:

Параметры объявленные функции C (у Вас в программе) должна точно соответствовать параметрам в C объявлении (в коде С ).

Для функций, которые не являются внешними, но объявленные с использованием cdecl, внешнего связывание не требуют. Эти функции имеют некоторые ограничения, например не могут использоваться конструкции array of const (из-за разницы использования стека). Однако модификатор cdecl позволяет использовать функции написанные на C, как функции обратного вызова для подпрограмм, что подразумевает что они используют соглашение о вызовах cdecl.