IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Structure en VB.Net


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut Structure en VB.Net
    Bonjour à tous,

    Est-il possible d'obtenir la taille en octet d'une structure contenant une autre structure en tant que membre...

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Structure Struct1
      Dim membre1 AS Integer
      Dim membre2 AS Integer
    End Structure
     
    Public Structure Struct2
      Dim membre1 AS Integer
      Dim Membre2() AS Struct1 'Le membre ici est un tableau
    End Structure
    Tout ceci étant sous VB.Net 2005

    Merci

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Non,

    ni System.Runtime.interopServices.Marshal.SizeOf() ni len()

    Le problème est que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SizeOf(Struct1.Membre2) = 0         'Membre2 = array of structure
    Donc

    48 est donc erroné

    Merci quand même...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Au cas ou quelqu'un me proposerait cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SizeOf(Struct1) + (SizeOf(Struct2) * (Nombre d'élément du tableau))
    Le résultat (je ne sais pas pourquoi) est aussi inexacte.

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Bonjour.

    A moins de préciser la taille totale du tableau de Struct1, ça semble difficile.

    Comme je suppose que c'est pour être utilisé avec une API, cette taille doit être connue.

    Donc un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Structure Struct2
      Dim membre1 AS Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _
      Dim Membre2() AS Struct1 
    End Structure
    Je te renvoie ici pour plus de détail :
    http://msdn2.microsoft.com/en-us/lib...e6(VS.71).aspx

    Cdt.

  6. #6
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Je voulais proposer cette solution aussi, mais apparement, après test, ça ne fonctionne pas.
    L'exception suivante est levé lorsqu'on effectue un sizeof de la structure

    Une exception non gérée du type 'System.ArgumentException' s'est produite dans WindowsApplication4.exe
    Informations supplémentaires : Le type Struct2 ne peut pas être marshalé comme une structure non managée ; il n'est pas possible de calculer une taille ou un offset.
    Sinon, tu peux fixer la taille gràce à l'attribut StructLayoutAttribute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' member1 = 4 ; member2 = 10 * 8
    <StructLayout(LayoutKind.Sequential, Size:=84)> _
    Public Structure Struct2
        Dim membre1 As Integer
        Dim Membre2() As Struct1
    End Structure

  7. #7
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Normalement, on ne peut pas calculer la taille d'un structure qui contient un array car le Runtime n'a aucun moyen de savoir combien d'éléments il y a dedans et de toute façon lors du Marshaling cette information (nombre d'éléments) n'est stockée nul part. D'ailleurs si je me souviens bien en C++ il y a le même genre de problème le sizeof d'un array est toujours 4 (ou 8) ce qui est la taille du pointeur vers l'array...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    La solution (définir la taille) contourne un peu la question à savoir comment obtenir la taille de la structure.

    Je vais accepter cette réponse mais si vous avez d'autres solutions, je suis preneur.

    Merci à tous de vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PInvoke de structure en CF .NET
    Par yocks dans le forum C#
    Réponses: 3
    Dernier message: 11/04/2011, 14h09
  2. [VB.NET]Structures, class et iCompare
    Par Golzinne dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/12/2005, 18h20
  3. Vb.Net et Access : comment modifier la structure d'une base
    Par hucliez dans le forum Accès aux données
    Réponses: 3
    Dernier message: 09/11/2005, 13h33
  4. [C#] Convertion de structure vers Delphi .NET
    Par Laurent Dardenne dans le forum Windows Forms
    Réponses: 21
    Dernier message: 08/01/2005, 02h36
  5. [C++ .NET] Structure dynamique
    Par tidou dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 29/10/2004, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo