MSDN ブログの記事を読んだ後に疑問が生じます。. この記事では、 aFILETIMEを anにキャストすると、位置合わせされていない__int64ポインターが作成される可能性があると述べています。
FILETIME、LUID、およびLUID_AND_ATTRIBUTESstructs は、次のように Windows ヘッダーで宣言されています。
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
}
typedef struct LUID {
ULONG LowPart;
LONG HighPart;
}
typedef struct LUID_AND_ATTRIBUTES {
LUID Luid;
DWORD Attributes;
}
FILETIMEとLUIDstructs は同様のレイアウトを持っているため、 a も として扱うと、LUID位置合わせされていない__int64ポインターが作成される可能性があります。ただし、Windows.pas(ここでは Delphi XE3) これを実践しています。たとえば、次のようになります。
{$ALIGN 4}
LUID_AND_ATTRIBUTES = record
Luid : Int64; // Here, LUID is treated as Int64
Attributes: DWORD;
end;
{$ALIGN ON}
別の例は
function LookupPrivilegeValue(lpSystemName, lpName: LPCWSTR;
var lpLuid: Int64): BOOL; stdcall; // LUID is treated as Int64
/の ようにFILETIME、またはLUID 直接構造体を安全に扱う方法は? キーは何ですか?UInt64Int64