QuadPart : C'est quoi t'est-ce ? [Résolu]

Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- - Dernière réponse : cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 4 nov. 2009 à 19:22
Salut à tou(te)s
Je suis plus habitué du forum VBFrance et j'ai un souci de lecture d'un programme en C++ (que j'aimerai reproduire en VB).

Ma question : Dans ce programme, je vois cette ligne :
pRawData->Time = pObject->PerfTime.QuadPart;

Sachant que PerfTime est défini dans la structure comme un LARGE_INTEGER.
(c'est bien 2 fois 4 octets ? parce qu'avec les changements de dénomination en VB6 et .Net, j'ai des doutes)

Alors voilà, que représente ce .QuadPart ?
Est-ce que ça n'extrait qu'une partie de cet entier ? (poids faible ou fort)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Afficher la suite 
A voir également:

12 réponses

Meilleure réponse
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
3
Merci
Oups, tu as répondu entre temps :)

LARGE_INTEGER et LONGLONG c'est "la même chose", ou plutôt ça représente un entier 64bit.

LONGLONG : tu attaques direct ton 64bit.
LARGE_INTEGER : tu permets d'avoir les 2 octets de poids fort et de poids faible. Ca doit servir pour des vieux programmes fait avec VB6 ou VC++ 6.

Tu as inversé :
LONGLONG c'est LARGE_INTEGER.QuadPart

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fregolo52
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
3
Merci
QuadPart permet d'accéder à la valeur x64 de la structure.
---
VB.NET is good ... VB6 is better

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Je pense que ça prend les deux int qui composent la structure pour former un int64 ... A confirmer.
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
0
Merci
Merci
Tu es partout, toi ...
Je vais attendre la confirmation.

J'ai un doute, d'un coup : La syntaxe de mon instruction mystère, est-elle bien du C++ ?
Commenter la réponse de cs_Jack
Messages postés
788
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
8 mars 2017
5
0
Merci
Bonjour,

Voilà ce qu'on trouve dans MSDN:
<<
typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; // In Visual C++, a typedef to _ _int64} LARGE_INTEGER;

This union allows C++ programmers to use the structure part if their compiler doesn?t support 64-bit integers, or to use the LONGLONG part if it does. There are no unions in Basic, so the closest you can get is the following type:

Type LARGE_INTEGER LowPart As Long HighPart As LongEnd Type
>>


louis14
Commenter la réponse de cs_louis14
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
0
Merci
Merci Louis14
(14:Calvados ? moi 76)

Donc, Ok, cela confirme que les Long dont on parle sont bien des 32 bits et que, par conséquence, un LARGE_INTEGER est un 64 bits.
Mais cela ne me donne pas d'indication sur la fonction que représente QuadPart.
D'après la ligne MSDN que tu m'offres, est-ce que la syntaxe veut dire qu'un LARGE_INTEGER est une déclaration équivalente à LONGLONG.QuadPart ?

(excuse ma lourdeur, mais je ne suis pas habitué aux syntaxes C++)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
0
Merci
salut,

A priori, la syntaxe est bonne.
LONGLONG est un __int64. (donc en .NET, c'est un Long)
Donc, Time doit aussi être un entier 64bit.
Commenter la réponse de fregolo52
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
0
Merci
re oups,
il faut lire :
LARGE_INTEGER : tu permets d'avoir les 4 octets de poids fort et 4 octets de poids faible.
Commenter la réponse de fregolo52
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
0
Merci
Aïe
Si un LARGE_INTEGER est composé de 2 x 4 octets, c'est donc un 32 bits, non ?

Est-ce que, comme les LONG sont passés de 4 à 8 octets en .Net, il faut comprendre qu'un LARGE_INTEGER est un 2 x 8 octets ?
Commenter la réponse de cs_Jack
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
0
Merci
Jack tu es mal réveillé comme moi
2 x 4 octets 2 x 4 x 8 64bit

Pour avoir bossé sur des OS 64bit (Windows et Linux), le long est super chiant à gérer.
On a eu une belle surprise quand on a fait communiquer un Windows avec un Linux x64.
Pour résumer :
Pour framework .NET et JRE : long = 8 octets
Pour les applis native Windows x86 ou x64 : long = 4 octet
Pour les applis natives Linux x86 : long = 4 octets
Pour les applis natives Linux x64 : long = 8 octets

Donc quand on travaille avec des long faut faire super gaffe aux environnements.
Commenter la réponse de fregolo52
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
0
Merci
lol, je patine !
Tu as tout à fait raison, je me suis embrellé les pinceaux.
Cela veut dire que, en C++, le LONG vaut toujours 4 octets et qu'il faut utiliser LONGLONG pour passer aux 8 octets.

Bref, et le QuadPart dans tout ça ?
Est-ce que c'est simplement la méthode d'accès à la valeur de la variable entière ou bien s'agit-il d'une fonction qui ne ponctionne qu'une partie de la valeur ?
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
0
Merci
Cool. Merci !
Commenter la réponse de cs_Jack