14

win32のMSdevstudioで、コードをCからC++に変換しています。古いコードでは、QueryPerformanceCounter()を使用して高速タイミングを実行し、取得した__int64値、特にマイナスと除算に対していくつかの操作を行いました。しかし、C ++では、QueryPerformanceCounter()が返すものであるため、LARGE_INTEGERを使用する必要があります。しかし、今、私が値に対していくつかの簡単な計算を試みて実行する行で、エラーが発生します:

エラーC2676:バイナリ'-':'LARGE_INTEGER'は、この演算子または事前定義された演算子に受け入れられる型への変換を定義していません

変数を__int64にキャストしようとしましたが、次のようになります。

エラーC2440:'型キャスト':'LARGE_INTEGER'から'__int64'に変換できません

これを解決するにはどうすればよいですか?

ありがとう、

4

6 に答える 6

30

LARGE_INTEGERは、64ビット整数と32ビット整数のペアの和集合です。1つで64ビット演算を実行する場合は、ユニオン内から64ビット整数を選択する必要があります。

LARGE_INTEGER a = { 0 };
LARGE_INTEGER b = { 0 };

__int64 c = a.QuadPart - b.QuadPart;
于 2009-09-08T18:00:16.300 に答える
10

LARGE_INTEGERはユニオンであり、ここに文書化されています。あなたはおそらくQuadPartメンバーが欲しいでしょう。

于 2009-09-08T17:58:18.910 に答える
9

ここにあります:

LARGE_INTEGER x,y;
///
//Some codes...
///

__int64 diff = x.QuadPart - y.QuadPart

QuadPartはLONG​​LONGとして定義されているため、 __int64と同じです

于 2009-09-08T18:04:40.143 に答える
3

LARGE_INTEGERは和集合です。64ビット値で作業する場合は、引き続き.QuadPartを使用できます。

于 2009-09-08T17:58:37.427 に答える
1

ドキュメントが備考セクション で述べているように:

LARGE_INTEGER構造は実際には結合です。コンパイラに64ビット整数のサポートが組み込まれている場合は、QuadPartメンバーを使用して64ビット整数を格納します。それ以外の場合は、LowPartおよびHighPartメンバーを使用して64ビット整数を格納します。

したがって、コンパイラが64ビット整数をサポートしている場合は、次のようにquadPartを使用します。

LARGE_INTEGER a, b;
__int64 diff = a.QuadPart - b.QuadPart
于 2016-08-30T16:28:39.097 に答える
0

答えに加えて、ゼロ以外の値でLARGE_INTEGERを作成しようとしている場合は、低い部分と高い部分を別々に割り当てることができます。LowPartは最初にユニオンで定義されたとおりであり、唯一のhighPartが署名されます。

LARGE_INTEGER li = {0x01234567, -1};
于 2017-02-23T19:03:50.043 に答える