2011-05-23 71 views
1

我使用這個FILETIME結構互操作:FILETIME在x64

[StructLayout(LayoutKind.Explicit)] 
public struct FILETIME 
{ 
    [FieldOffset(0)] 
    public int dwLowDateTime; 
    [FieldOffset(4)] 
    public int dwHighDateTime; 
    [FieldOffset(0)] 
    public long QuadDateTime; 
} 

它似乎在x86工作(現在不能測試),但它會在x64工作。我正在使用quadpart在DateTime和FILETIME之間進行轉換。

+3

在使用操作系統結構時,如果使用「Int32」和「Int64」而不是「int」和「long」,則可以節省很多混淆。 – 2011-05-23 16:39:58

回答

1

它可以在x64上工作,但可能無法在其他處理器體系結構上工作(例如IA64,如果您關心它的話)。

在win32中FILETIME是4字節對齊的。如果您運行的體系結構要求64位long爲8字節對齊,則訪問QuadDataTime字段可能會導致異常。

+0

爲什麼訪問64位覆蓋會導致異常? – 2011-05-23 19:08:48

+0

如果指針不是8字節對齊並且架構需要對齊,則會導致對齊錯誤。請參閱FILETIME的MSDN文檔,該文檔明確警告將指向FILETIME的指針指向__int64 *。 – John 2011-05-23 19:18:57

2

這應該沒問題。無論底層架構如何(x86或x64),數據類型的大小在.NET中都是固定的。你的結構總是8字節大小。