function lua_version(L: Plua_State): Plua_Number; cdecl;
(* alternative declaration *)
function lua_version(var L: lua_State): Plua_Number; cdecl;
В основном я использую такие определения для BlackBox:
(* C types aliases *)
int32* = INTEGER;
uint32* = INTEGER; (* unsigned int32 *)
double* = REAL;
LongBool* = BOOLEAN;
(* Free Pascal/Delphi type aliases *)
LongWord* = uint32;
Double* = double;
Cardinal* = uint32;
enum* = int32; (* enumeration type *)
Pointer* = POINTER TO RECORD [untagged] END; (* unsafe *)
PAnsiChar* = POINTER TO ARRAY [untagged] OF SHORTCHAR; (* UTF-8 encoded string *) (* unsafe *)
PChar* = PAnsiChar;
Что касается других "сложных" типов данных, что немало зависит от того как они определены в интерфейсе функции. Чистые указатели стараюсь не использовать, а заменять их на указатель на нетегированные запись/массив.
(* misc. types *)
ByteArrPtr* = POINTER TO ARRAY [untagged] OF BYTE; (* unsafe *)
RealArrPtr* = POINTER TO ARRAY [untagged] OF Real; (* unsafe *)
PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR;
PtrVoid* = (* Pointer, 32-bit *) INTEGER; (* C void* *)
PLongBool* = POINTER TO ARRAY [untagged] 1 OF BOOLEAN;