QuadPart : C'est quoi t'est-ce ?

Résolu
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 3 nov. 2009 à 17:42
cs_Jack Messages postés 14006 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)

12 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 nov. 2009 à 10:50
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
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
4 nov. 2009 à 18:27
QuadPart permet d'accéder à la valeur x64 de la structure.
---
VB.NET is good ... VB6 is better
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 nov. 2009 à 20:03
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2009 à 00:50
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++ ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 nov. 2009 à 08:59
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2009 à 10:44
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)
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 nov. 2009 à 10:45
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.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 nov. 2009 à 10:59
re oups,
il faut lire :
LARGE_INTEGER : tu permets d'avoir les 4 octets de poids fort et 4 octets de poids faible.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2009 à 11:34
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 ?
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 nov. 2009 à 15:21
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.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2009 à 15:43
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 ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 nov. 2009 à 19:22
Cool. Merci !
0
Rejoignez-nous