Comment créer FILETIME dans Win32?
Question
I ai un __int64
de valeur qui est une valeur de FILETIME
64 bits. FILETIME
a une dwLowDateTime
et dwHighDateTime
. Lorsque je tente d'attribuer un __int64
à un FILETIME
je reçois un C2440. Comment puis-je attribuer le __int64
au FILETIME
?
Ou comment puis-je diviser le __int64
afin que je puisse affecter la partie basse à dwLowDateTime
et la grande partie à dwHighDateTime
?
La solution
Voici le schéma de base.
__int64 t;
FILETIME ft;
ft.dwLowDateTime = (DWORD)t;
ft.dwHighDateTime = (DWORD)(t >> 32);
DECONSEILLE approche
ft = *(FILETIME *)(&t);
Il va travailler en raison de l'arrangement intelligent de FILETIME, mais le sacrifice en matière de portabilité et de clarté est pas la peine. Utiliser uniquement en cas de besoin urgent prouvé et l'envelopper dans de prouver qu'il affirme fonctionnera.
Autres conseils
Mike,
Vous pouvez utiliser une struct ULARGE_INTEGER pour copier le __int64 dans le FILETIME:
__int64 i64;
ULARGE_INTEGER li;
FILETIME ft;
li.QuadPart = i64;
ft.dwHighDateTime = li.HighPart;
ft.dwLowDateTime = li.LowPart;
__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;