2009-07-08 33 views
0

値が__int64で、これは64ビットのFILETIME値です。 FILETIMEは、dwLowDateTimeおよびdwHighDateTimeを有する。 FILETIME__int64を割り当てようとすると、C2440が表示されます。 FILETIME__int64を割り当てるにはどうすればよいですか?Win32でFILETIMEを作成するには?

に低い部分を割り当てできるように、__int64を分割する方法と、高い部分をdwHighDateTimeに割り当てる方法はありますか。

答えて

3

ここに基本的な概要があります。アプローチ

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

推奨しない

__int64 t; 
FILETIME ft; 

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

それが原因FILETIMEの巧妙な配置に動作しますが、移植性と明瞭での犠牲はそれだけの価値はありません。実証済みの時間が必要な時にのみ使用してください。は、それが動作することを証明するためにアサートします。

+0

ビットシフトを...もちろん。 –

0
__int64 i; 
FILETIME ft; 

// From __int64 to FILETIME 

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


// From FILETIME to __int64 

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

マスクは0xFFFFFFFFでなければなりません。 ft.dwHighDateTimeを<< 32の前に__int64にキャストしない限り、2番目の変換は機能しません。また、DWORDに署名するとft.dwLowDateTimeを追加することが問題になる可能性があります。 –

2

マイク、

あなたはFILETIMEに__int64をコピーするULARGE_INTEGER構造体を使用することができます。

__int64 i64; 
ULARGE_INTEGER li; 
FILETIME ft; 

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