Win32のMSdevstudioでコードをCからC++に変換しています。古いコードでは、QueryPerformanceCounter()を使用して高速タイミングを実行し、取得した__int64値、特にマイナスと除算に対していくつかの操作を行いました。しかし、C++では、QueryPerformanceCounter()が返すものであるため、LARGE_INTEGERを使用する必要があります。しかし今、私が値に対していくつかの簡単な計算をしようとすると、エラーが発生します。
エラーC2676:バイナリ '-': 'LARGE_INTEGER'は、この演算子または事前定義された演算子に受け入れられる型への変換を定義していません
変数を__int64にキャストしようとしましたが、次のようになります。
エラーC2440:「型キャスト」:「LARGE_INTEGER」から「__int64」に変換できません
これを解決するにはどうすればよいですか?
ありがとう、
LARGE_INTEGERは、64ビット整数と32ビット整数のペアの和集合です。 1つで64ビット演算を実行する場合は、ユニオン内から64ビット整数を選択する必要があります。
LARGE_INTEGER a = { 0 };
LARGE_INTEGER b = { 0 };
__int64 c = a.QuadPart - b.QuadPart;
ここにあります:
LARGE_INTEGER x,y;
///
//Some codes...
///
__int64 diff = x.QuadPart - y.QuadPart
QuadPartは[〜#〜] longlong [〜#〜]として定義されているため、__ int64と同じです。
LARGE_INTEGER
はユニオンです ここに記載されています 。おそらくQuadPart
メンバーが必要です。
LARGE_INTEGER は共用体ですが、64ビット値で作業する場合は引き続き.QuadPartを使用できます。
答えに加えて、ゼロ以外の値でLARGE_INTEGERを作成しようとしている場合は、低い部分と高い部分を別々に割り当てることができます。 LowPartは最初にユニオンで定義されたとおりであり、highPartのみが署名されます。
LARGE_INTEGER li = {0x01234567, -1};
Documentation がRemarksセクションで述べているように:
LARGE_INTEGER
構造体は実際には和集合です。コンパイラに64ビット整数のサポートが組み込まれている場合は、QuadPartメンバーを使用して64ビット整数を格納します。それ以外の場合は、LowPartメンバーとHighPartメンバーを使用して64ビット整数を格納します。
したがって、コンパイラが64ビット整数をサポートしている場合は、次のようにquadPartを使用します。
LARGE_INTEGER a, b;
__int64 diff = a.QuadPart - b.QuadPart