cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
3 nov. 2009 à 17:42
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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)
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 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
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 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
>>
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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 ?