I am converting some code from C to C++ in MS dev studio under win32. In the old code I was doing some high speed timings using QueryPerformanceCounter() and did a few manipulations on the __int64 values obtained, in particular a minus and a divide. But now under C++ I am forced to use LARGE_INTEGER because that's what QueryPerformanceCounter() returns. But now on the lines where I try and do some simple maths on the values I get an error:
error C2676: binary '-' : 'LARGE_INTEGER' does not define this operator or a conversion to a type acceptable to the predefined operator
I tried to cast the variables to __int64 but then get:
error C2440: 'type cast' : cannot convert from 'LARGE_INTEGER' to '__int64'
How do I resolve this?
Thanks,
If your compiler has built-in support for 64-bit integers, use the QuadPart member to store the 64-bit integer. Otherwise, use the LowPart and HighPart members to store the 64-bit integer. So if your compiler supports 64 bit integers use quadPart like this : LARGE_INTEGER a, b; __int64 diff = a.QuadPart - b.QuadPart.
The __int64 type, for instance, always has the size 64 bits both on the 32-bit and 64-bit platforms. The types size_t and ptrdiff_t are 32-bit on the 32-bit platform and 64-bit on the 64-bit platform. It is this point that causes troubles and confusion when printing values of these types.
LARGE_INTEGER is a union of a 64-bit integer and a pair of 32-bit integers. If you want to perform 64-bit arithmetic on one you need to select the 64-bit int from inside the union.
LARGE_INTEGER a = { 0 };
LARGE_INTEGER b = { 0 };
__int64 c = a.QuadPart - b.QuadPart;
LARGE_INTEGER
is a union, documented here. You probably want a QuadPart
member.
Here it is:
LARGE_INTEGER x,y;
///
//Some codes...
///
__int64 diff = x.QuadPart - y.QuadPart
Because QuadPart is defined as a LONGLONG , that same as __int64.
LARGE_INTEGER is a union, you can still use .QuadPart if you want to work on the 64-bit value.
As the Documentation says in the Remarks section :
The LARGE_INTEGER
structure is actually a union. If your compiler has built-in support for 64-bit integers, use the QuadPart member to store the 64-bit integer. Otherwise, use the LowPart and HighPart members to store the 64-bit integer.
So if your compiler supports 64 bit integers use quadPart like this :
LARGE_INTEGER a, b;
__int64 diff = a.QuadPart - b.QuadPart
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With