类型实在是多啊,遇到一个看一个吧。
NativeInt和NativeUInt。以往没注意,记得只有 int8 int16 int32 uint8 uint16 uint32,没有这两个。这是定义在system里的。
在winapi.windows里面定义,
INT_PTR LONG_PTR SSIZE_T都是 NativeInt
UINT_PTR ULONG_PTR DWORD_PTR SIZE_T 都是 NativeUInt
INT_PTR = System.IntPtr; // NativeInt;
{$EXTERNALSYM INT_PTR}
UINT_PTR = System.UIntPtr; // NativeUInt;
{$EXTERNALSYM UINT_PTR}
LONG_PTR = NativeInt;
{$EXTERNALSYM LONG_PTR}
ULONG_PTR = NativeUInt;
{$EXTERNALSYM ULONG_PTR}
DWORD_PTR = ULONG_PTR;
{$EXTERNALSYM DWORD_PTR}
HANDLE_PTR = type NativeUInt;
{$EXTERNALSYM HANDLE_PTR}
SIZE_T = ULONG_PTR;
{$EXTERNALSYM SIZE_T}
SSIZE_T = LONG_PTR;
{$EXTERNALSYM SSIZE_T}
这个定义关系到一个函数原型的变化:ReadProcessMemory
function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;
nSize: SIZE_T; var lpNumberOfBytesRead: SIZE_T): BOOL; stdcall;
{$EXTERNALSYM ReadProcessMemory}
最后一个参数,原来是longword,现在改为SIZE_T,即NativeUInt
NativeUInt是什么?