Я пытаюсь использовать FreePascal 2.2.2 ibase60.inc
из нижней ссылки этого ответа в Delphi Tokyo.
Он начинается со следующих определений:
type
{ Unsigned types }
UChar = Byte;
UShort = Word;
UInt = DWord;
ULong = DWord;
{ Signed types }
Int = LongInt;
Long = LongInt;
Short = SmallInt;
Float = Single;
{ Pointers to basic types }
PInt = ^Int;
PShort = ^Short;
PUShort = ^UShort;
PLong = ^Long;
PULong = ^ULong;
PFloat = ^Float;
PUChar = ^UChar;
PVoid = ^Pointer;
const
ISC_TRUE = 1;
ISC_FALSE = 0;
const
ISC__TRUE = ISC_TRUE;
ISC__FALSE = ISC_FALSE;
Type
ISC_USHORT = word;
ISC_STATUS = clong;
ISC_INT64 = int64;
ISC_UINT64 = UInt64; // qword;
ISC_LONG = Longint;
PISC_USHORT = ^ISC_USHORT;
PISC_STATUS = ^ISC_STATUS;
PPISC_STATUS = ^PISC_STATUS;
PISC_INT64 = ^ISC_INT64;
PISC_UINT64 = ^ISC_UINT64;
PISC_LONG = ^ISC_LONG;
Как преобразовать этот тип ISC_STATUS = clong
в Delphi? Его нет в разделе переменных и типов данных FreePascal, и до сих пор мне не удалось найти работающий код. .
clong
тип (как и другие типы, производные отC
языка), в основном объявленный вctypes
модуль. для систем на основе Unix вам необходимо просмотреть некоторые включения (aliasctp.inc
-›ctypes.inc
), для другие ОС объявлены вctypes.pp
какclong = int64;
илиclong = longint;
в зависимости от целевого процессора. Другими словами: используйте источники. - person Abelisto   schedule 27.10.2017QWORD
должно бытьUInt64
, но некоторые старые версии Delphi имели только подписьInt64
. Возможно, то же самое верно и для fpc. - person David Heffernan   schedule 27.10.2017{$ifndef FPC}
, вероятно, для совместимости со старыми версиями Delphi, как упоминал Дэвид. - person Abelisto   schedule 28.10.2017qword = int64; // Keep h2pas "uses ctypes" headers working with delphi.
. Так что, похоже, это связано с тем, как h2pas перевелQWORD
, когда Delphi только подписал Int64, как говорит @David. - person Rudy Velthuis   schedule 31.10.2017