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?

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top