Taille structure

cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011 - 30 sept. 2009 à 10:30
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011 - 2 oct. 2009 à 07:34
Bonjour a tous

j'aurai eu besoin d'un peu d'aide. Je voudrais connaitre une méthode pour avoir la vrai taille d'une structure admettons la structure suivante :

structure TEST
public a as integer
public b as integer
public chaine() as string
end structure

admettons dans le code on dit :

dim test_t as TEST
dim taille as integer
taille = len(test_t)

et on a donc taille 4 + 4 + 0 (taille de a + taille de b + taille de chaine()) 8

maintenant si je fais

dim test_t as TEST
Redim test_t.chaine(30)
taille = len (test_t)

je m'attendais a avoir taille = 4 +4 +30, et bien non j'ai toujours 4+4+0

jme suis dit j'ai oublié un truc je fais donc la chose suivante :

dim test_t as TEST
Redim test_t.chaine(30)

for i as integer = 0 to 29
test_t.chaine(i)=nothing
next

taille = len(test_t)

on a toujours déséperement 8...

Je pense que dans la taille de la structure n'est pas comptabilisé la longueur des tableaux. Comment faire pour palier a ce probleme ?

Merci d'avance !!!

7 réponses

cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
30 sept. 2009 à 10:32
ps :

au passage lorsque je fait :

dim test_t as TEST
Redim test_t.chaine(30)

for i as integer = 0 to 29
test_t.chaine(i)=nothing
next

taille = len(test_t.chaine) j'ai une jolie petite erreur (que je n'ai pas lorsque je ne redimensionne pas le tableau)

erreur :
L'exception System.InvalidCastException n'a pas été gérée
Message="Incompatibilité de type."
Source="Microsoft.VisualBasic"
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
30 sept. 2009 à 10:34
ps dans le premier et le second message je voulais bien entendu dire :

FOR I AS INTEGER = 0 TO 30!!!
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
30 sept. 2009 à 14:08
Bonjour,

Je ne connais pa VB .NET, mais j'imagine que dans ce cas il est similaire à VB6.

Quand dans ta structure tu définis:

public chaine() as string, tu définis un tableau à n dimensions. VB le créé quelque part en mémoire mais ta variable chaine contient en vérité l'adresse dudit tableau sous forme sauf erreur de ma part d'un double. J'aurais donc tendance à penser que la taille de ta structure ne change pas quelque soit la taille de ton tableau.


Calade
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 sept. 2009 à 20:46
une adresse en 'double' ...
Tu pense pointer sur l'octet 2005.08 en memoire ???

Une adresse est toujours un entier.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
1 oct. 2009 à 09:01
OK,
Autant pour moi !!!


Calade
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
1 oct. 2009 à 23:23
Bonsoir,
Ah Len() je pensais que cette fonction vb avait "dégager" de vb.net.
Pour déterminer la taille de ta structure utilise la méthode System.Runtime.InteropServices.Marshall.SizeOf. Tu devrais obtenir une taille de 12 octets ce qui est plus réaliste.

Willi
++
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
2 oct. 2009 à 07:34
ok merci a tous de vos réponses
+++
0
Rejoignez-nous