fzpitt
Messages postés3Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 5 juillet 2004
-
25 juin 2004 à 16:36
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
29 juin 2004 à 18:13
Bonjour,
j'ai développé une Dll en C qui récupère des valeurs d'un fichier pour alimenter, entre autre, une structure est définie comme suit :
où le membre Depass est également défini en structure :
typedef struct{
int DateDebut;
BYTE Moteur;
BYTE CodeDepassement;
double Durees;
double DureePerRange[C_UslmNbDurees];
int Tot;
float Nf;
float Dng;
float Ng;
int DateMax;
float Oat;
float Po;
} TYPE_Depassement;
Dans mon application VB, utilisant cette Dll C, j'ai les définitions suivantes :
Type TYPE_USLM
byt_NbDepassement As Byte
Depass(0 To CMax - 1) As TYPE_Depassement
End Type
où le membre Depass est également défini en structure :
Type TYPE_Depassement
lng_DateDebut As Long
byt_Moteur As Byte
byt_CodeDepassement As Byte
lng_Duree As Double
a_lng_Range(0 To C_UslmNbDureesEC145 - 1) As Double
lng_Tot As Long
sng_Nf As Single
sng_Dng As Single
sng_Ng As Single
lng_DateMax As Long
sng_Oat As Single
sng_Po As Single
End Type
Tout ceci fonctionne très bien, excepté lorsque pour ln_Duree j'ai des valeurs très grande du style 4291456230. La valeur récupéré dans la Dll est correcte, mais lors du passage à VB, il y a un problème de cohérence de valeur. Celle-ci ne correspond pas à celle lue par la Dll et pose un problème d'affichage (valeur du style 2,4646464546546e-308 !!!!).
fzpitt
Messages postés3Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 5 juillet 2004 28 juin 2004 à 09:47
Merci de ta proposition, mais avec 'Single' le problème empire puisqu'il ne peut contenir de nombre aussi grand que 'Double'.
Par ailleurs, lorsque j'affiche directement, sous VB, la valeur 'lng_Duree' de la structure 'TYPE_Depassement', le problème ne se pose pas. Il n'y a problème qu'à partir du moment où cette valeur est affichée en tant que membre de structure, elle-même membre de structure, sous VB !!!
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 29 juin 2004 à 18:13
salut
je mettrais effectivement ca :
public type TYPE_Uslm
NbDepassement as Byte
Depass(C_UslmNbMaxDepassement-1) as TYPE_Depassement
end type
public type TYPE_Depassement
DateDebut as long
Moteur as byte
CodeDepassement as byte
Durees as double
DureePerRange(C_UslmNbDurees-1) as double
Tot as long
Nf as single
Dng as single
Ng as single
DateMax as long
Oat as single
Po as single
end type
MAIS et il y a un MAIS : il faudrait peut etre mettre un
#pragma pack(4) pour aligner les structure comme VB sur un DWORD ou pack(8) pour etre sur un 8bytes-alignment...
je ne suis pas vraiment sur mais je pense que le defaut pack(1) ne doit pas marcher