Как создать FILETIME в Win32? - PullRequest
0 голосов
/ 08 июля 2009

У меня есть значение __int64, которое является 64-битным FILETIME значением. FILETIME имеет dwLowDateTime и dwHighDateTime. Когда я пытаюсь присвоить __int64 FILETIME, я получаю C2440. Как назначить __int64 на FILETIME?

Или как мне разделить __int64, чтобы я мог назначить нижнюю часть на dwLowDateTime, а верхнюю часть на dwHighDateTime?

Ответы [ 3 ]

3 голосов
/ 09 июля 2009

Вот основные наброски.

__int64 t;
FILETIME ft;

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

НЕ РЕКОМЕНДУЕТСЯ подход

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

Это будет работать из-за умного устройства FILETIME, но жертва в переносимости и ясности не стоит этого. Используйте только во время доказанной острой необходимости и заверните его в утверждения, чтобы доказать, что он будет работать.

2 голосов
/ 09 июля 2009

Mike

Вы можете использовать структуру ULARGE_INTEGER, чтобы скопировать __int64 в FILETIME:

__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;

li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;
0 голосов
/ 09 июля 2009
__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;
...