如何在Win32中创建FILETIME?

时间:2009-07-08 19:56:30

标签: winapi int filetime

我的值__int64是64位FILETIME值。 FILETIME有一个dwLowDateTimedwHighDateTime。当我尝试将__int64分配给FILETIME时,我会得到一个C2440。如何将__int64分配给FILETIME

或者如何拆分__int64以便我可以将低级部分分配给dwLowDateTime,将高级部分分配给dwHighDateTime

3 个答案:

答案 0 :(得分:3)

这是基本大纲。

__int64 t;
FILETIME ft;

ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);

不推荐方法

ft = *(FILETIME *)(&t);

由于FILETIME的巧妙安排,它会起作用,但是在便携性和清晰度方面的牺牲是不值得的。只有在经过验证的需要时才使用将其包装在断言中以证明它能够正常工作。

答案 1 :(得分:2)

麦克,

您可以使用ULARGE_INTEGER结构将__int64复制到FILETIME中:

__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;

li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;

答案 2 :(得分:0)

__int64 i;
FILETIME ft;

// From __int64 to FILETIME

ft.dwHighDateTime = (DWORD)(i >> 32);
ft.dwLowDateTime = (DWORD)(i & 0xFFFFFFFF);


// From FILETIME to __int64

i = (ft.dwHighDateTime << 32) + ft.dwLowDateTime;