Search code examples
c++int64

manipulating LARGE_INTEGERS


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,


Solution

  • 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;