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