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

C# Discussion :

Problème de Marshaling de tableaux


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut Problème de Marshaling de tableaux
    Bonjour,

    Je travaille sur une application devant lire et écrire des valeurs sur un automate. Les données sur l'automate sont définies selon un structure de données avec des booléens sur 1 byte, des int signés sur 2 byte, des chaîne de caractère de taille fixe de 21 caractères, ...

    En ce qui concerne l'accès à une seule et unique valeur, ça fonctionne. J'ai définit des classes qui représente un bool automate, un int automate et un string 21 caractère automate. Voici mes classes pour un int et un string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
      [StructLayout(LayoutKind.Sequential, Size = 2)]
      public class iCommunication
      {
        [MarshalAs(UnmanagedType.I2, SizeConst = 2)]
        public short Value;
     
        public iCommunication()
        {
          Value = 0;
        }
     
        public override bool Equals(object obj)
        {
          if (!(obj is iCommunication))
            return false;
     
          return this == (iCommunication)obj;
        }
     
        public override int GetHashCode()
        {
          return base.GetHashCode();
        }
     
        public static bool operator ==(iCommunication a, iCommunication b)
        {
          return a.Value == b.Value;
        }
     
        public static bool operator !=(iCommunication a, iCommunication b)
        {
          return !(a == b);
        }
      }
     
      [StructLayout(LayoutKind.Sequential, Size = 21)]
      public class sCommunication
      {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
        public string Value;
     
        public sCommunication()
        {
          Value = "";
        }
     
        public override bool Equals(object obj)
        {
          if (!(obj is sCommunication))
            return false;
     
          return this == (sCommunication)obj;
        }
     
        public override int GetHashCode()
        {
          return base.GetHashCode();
        }
     
        public static bool operator ==(sCommunication a, sCommunication b)
        {
          return a.Value == b.Value;
        }
     
        public static bool operator !=(sCommunication a, sCommunication b)
        {
          return !(a == b);
        }
      }
    J'aimerais maintenant récupérer, comme c'est défini dans la structure de données automate, des tableaux de int, et surtout, des tableaux de string... En ce qui concerne le tableau de int, j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        [MarshalAs(UnmanagedType.SafeArray, SafeArrayUserDefinedSubType=typeof(iCommunication))]
        //[MarshalAs(UnmanagedType.LPArray, SafeArrayUserDefinedSubType=typeof(iCommunication), SizeConst=20)]
        public iCommunication[] Array;
     
        //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20, ArraySubType = UnmanagedType.I2)]
        //public short[] Array;
    Rien ne fonctionne avec les tableau de iCommunication. Par contre, ca marche avec le tableau de short. Ce n'est pas la solution idéale... Par contre, pour ce qui est d'un tableau de string, je ne sais pas comment faire. J'ai essayé ceci, mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2)]
        public sCommunication[] Array;
    Je suis un peu perdu dans ce Marshaling. J'y vais à tâton, et je ne suis pas sur de ce que je fais. Un petit coup de main serait le bienvenue...

    Merci d'avance!

  2. #2
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Personne n'a d'idée? Je suis vraiment embêté...

    Où il faut d'autres explications?

    Merci d'avance à ceux qui prendront le temps !

Discussions similaires

  1. Problème avec imbrication de tableaux
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 11/07/2006, 21h59
  2. [XHTML/CSS] Problème d'espaces entre tableaux
    Par falcon dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 16/06/2006, 09h19
  3. Réponses: 3
    Dernier message: 07/04/2006, 16h06
  4. [Smarty] problème compréhension sur les tableaux
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 09/02/2006, 16h44

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