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

VB.NET Discussion :

Mes premières investigations [Débutant]


Sujet :

VB.NET

  1. #1
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut Mes premières investigations
    Bonjour Madame, Monsieur.

    J'aimerais savoir s'il existe en Vb 2010 un moyen de convertir une structure en tableau d'octets, sans utiliser les instructions FileOpen, FilePut, FileGet et FileClose, lesquelles m'a-t-il semblé ne sont guère en odeur de sainteté chez les puristes de Vb.net.

    Avec mes remerciements anticipés

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Jean-Marie Grave Voir le message
    J'aimerais savoir s'il existe en Vb 2010 un moyen de convertir une structure en tableau d'octets
    Oui, mais sous quelle forme exactement ?

    Si tu n'as pas de contrainte sur la disposition exacte en mémoire, tu peux utiliser la sérialisation binaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function ToByteArray(ByVal obj As Object) As Byte()
     
        Dim formatter As New BinaryFormatter()
        Using ms As New MemoryStream()
            formatter.Serialize(obj, ms)
            Return ms.ToArray()
        End Using
     
    End Function
    Si tu veux que les données soient disposées en mémoire comme dans une structure C, tu peux utiliser le marshalling (qui sert normalement à l'interopérabilité avec du code natif). Il faut mettre un attribut sur la structure pour que ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <StructLayout(LayoutKind.Sequential)>
    Structure Foo
        Public X As Integer
        Public Y As Integer
    End Structure
     
    Function ToByteArray(Of T As Structure)(ByVal obj As T) As Byte()
        Dim size As Integer = Marshal.SizeOf(GetType(T))
        Dim ptr = Marshal.AllocHGlobal(size)
        Marshal.StructureToPtr(obj, ptr, False)
        Dim bytes(size - 1) As Byte
        Marshal.Copy(ptr, bytes, 0, size)
        Return bytes    
    End Function
    (la fonction est générique pour pouvoir supporter n'importe quelle structure)

    Citation Envoyé par Jean-Marie Grave Voir le message
    sans utiliser les instructions FileOpen, FilePut, FileGet et FileClose, lesquelles m'a-t-il semblé ne sont guère en odeur de sainteté chez les puristes de Vb.net.
    Effectivement ces instructions sont un héritage de VB6, elles ne sont présentes dans VB.NET que pour faciliter le portage de code VB6 existant vers .NET.

  3. #3
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Merci Monsieur Levesque.

    Je pense que j'adopterai votre seconde solution. Encore faudra-t-il que j'étudie la sérialisation : mes 72 ans à l'état civil ne me donnent que quelques jours en Vb 2010.

    Encore merci.

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

Discussions similaires

  1. Récupérer la première colonne de chacun de mes fichiers
    Par natdePau dans le forum Général Python
    Réponses: 16
    Dernier message: 11/03/2015, 23h57
  2. Réponses: 3
    Dernier message: 24/01/2015, 12h30
  3. Réponses: 19
    Dernier message: 18/03/2014, 20h06
  4. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 12h44
  5. Stocker mes données
    Par Le Fou dans le forum C++Builder
    Réponses: 23
    Dernier message: 05/07/2002, 16h02

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