Question

Je suis en train de convertir un code de C à C ++ en studio MS dev sous win32. Dans l'ancien code que je faisais des timings à grande vitesse à l'aide QueryPerformanceCounter () et fait quelques manipulations sur les valeurs de __int64 obtenues, en particulier moins et une fracture. Mais maintenant, en C ++ je suis obligé d'utiliser LARGE_INTEGER parce que ce rendement QueryPerformanceCounter (). Mais maintenant sur les lignes où j'essayer de faire des mathématiques simples sur les valeurs que je reçois une erreur:

C2676 d'erreur: binaire « - »: « LARGE_INTEGER » ne définit pas cet opérateur ou une conversion en un type acceptable pour l'opérateur prédéfini

J'ai essayé de jeter les variables à __int64 mais obtenir:

erreur C2440: 'type cast': ne peut pas convertir 'LARGE_INTEGER' à '__int64'

Comment puis-je résoudre ce problème?

Merci,

Était-ce utile?

La solution

LARGE_INTEGER est une union d'un nombre entier de 64 bits et une paire d'entiers de 32 bits. Si vous souhaitez effectuer des opérations arithmétiques 64 bits sur un, vous devez sélectionner l'int 64 bits à l'intérieur de l'Union.

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

__int64 c = a.QuadPart - b.QuadPart;

Autres conseils

Ici, il est:

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

__int64 diff = x.QuadPart - y.QuadPart

Comme QuadPart est défini comme un LONGLONG , que même que __ int64 .

LARGE_INTEGER est une union, documenté ici . Vous voulez probablement un membre de QuadPart.

LARGE_INTEGER est une union, vous pouvez toujours utiliser .QuadPart si vous voulez travailler sur la valeur 64 bits.

Documentation dit dans les Remarques :

La structure LARGE_INTEGER est en fait une union. Si votre compilateur a un support intégré pour les entiers 64 bits, utilisez le membre QuadPart pour stocker l'entier de 64 bits. Dans le cas contraire, utiliser les membres LowPart et HighPart pour stocker le nombre entier 64 bits.

Donc, si votre compilateur prend en charge 64 bits entiers utilisent QuadPart comme ceci:

LARGE_INTEGER a, b;
__int64 diff = a.QuadPart - b.QuadPart

En plus des réponses, si vous cherchez à construire un LARGE_INTEGER avec une valeur différente de zéro, vous pouvez affecter les parties basses et hautes séparément. LowPart est d'abord tel que défini dans l'union, et est signé le seul HighPart.

LARGE_INTEGER li = {0x01234567, -1};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top