manipuler LARGE_INTEGERS
Je suis la conversion d'une partie de code de C à C++ dans MS dev studio sous win32. Dans l'ancien code, je faisais de la haute vitesse timings à l'aide de QueryPerformanceCounter() et a fait quelques manipulations sur l' __int64 valeurs obtenues, en particulier un moins et un fossé. Mais maintenant, sous C++, je suis obligé d'utiliser LARGE_INTEGER parce que c'est ce QueryPerformanceCounter() retourne. Mais maintenant, sur les lignes où j'ai essayer et faire un peu de mathématiques simples sur les valeurs que j'obtiens une erreur:
erreur C2676: binary '-' : 'LARGE_INTEGER" ne pas définir cet opérateur ou d'une conversion d'un type acceptable pour l'opérateur prédéfini
J'ai essayé de jeter les variables d' __int64, mais obtient alors:
error C2440: 'type cast' : impossible de convertir de 'LARGE_INTEGER' à '__int64'
Comment puis-je résoudre ce problème?
Merci,
source d'informationauteur Mick
Vous devez vous connecter pour publier un commentaire.
LARGE_INTEGER est une union d'un entier de 64 bits et d'une paire de nombres entiers de 32 bits. Si vous souhaitez effectuer l'arithmétique 64 bits sur un, vous devez sélectionner le 64 bits int de l'intérieur de l'union.
Ici, il est:
Parce que QuadPart est défini comme un LONGLONG , de même que __int64.
LARGE_INTEGER
est un syndicat, documenté ici. Vous voudrez probablement uneQuadPart
membre.LARGE_INTEGER est une union de fait, vous pouvez toujours l'utiliser .QuadPart si vous souhaitez travailler sur la valeur 64 bits.
Comme le La Documentation dit dans le Remarques section :
La
LARGE_INTEGER
structure est en fait une union. Si votre compilateur a un support intégré pour les entiers 64 bits, utilisez la QuadPart membre de stocker l'entier de 64 bits. Sinon, utilisez le LowPart et HighPart membres pour stocker l'entier de 64 bits.Donc, si votre compilateur prend en charge les entiers 64 bits utilisation quadPart comme ceci :
En plus des réponses, si vous cherchez à construire un LARGE_INTEGER avec une valeur autre que zéro, vous pouvez assigner le bas et le haut des pièces séparément. LowPart est d'abord tel que défini dans l'union, et la seule highPart est signé.