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 :

Pointeur sur structure managé


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut Pointeur sur structure managé
    Bonjour à tous !

    Passons directement au vif du sujet qui dure depuis presque 2 jours. Je tente de passer un tableau de structure à une DLL écrite en C (que je peux débugger, mais pas modifier).
    La structure ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        [StructLayout(LayoutKind.Sequential)]
        public struct MaStructure
        {
            public bool unBool;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = NAME_MAX_SIZE)]
            public byte[] name;
            public int nbr;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUMBER)]
            public int[] listID;
        }
    La fonction de la DLL prendre en paramètre un MaStructure* (pour le tableau).

    Le premier souci que j'ai obtenu est qu'il ne peut pas prendre de pointeur sur un type managé. J'ai donc voulu faire du Marshalling pour récupérer des pointeurs non managé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IntPtr ptrList = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MaStructure)) * nbrElements);
    Marshal.StructureToPtr(mesElements, ptrList, false);
    Le second souci arrive enfin ! En débuggant, lorsque j'exécute le StructureToPtr() mon thread est killé et aucune erreur n'apparait.

    Quelqu'un aurait-il une idée ?

    Merci de votre attention.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour

    je me sert du marshalling pour passe des byte[] vers du managé avec le code suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     byte[] messageContent = new byte[contentSize];
                GCHandle pinnedMessageContent = GCHandle.Alloc(messageContent, GCHandleType.Pinned);
                Marshal.StructureToPtr(message, pinnedMessageContent.AddrOfPinnedObject(), true);
    cordialement

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Citation Envoyé par ricky78 Voir le message
    bonjour

    je me sert du marshalling pour passe des byte[] vers du managé avec le code suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     byte[] messageContent = new byte[contentSize];
                GCHandle pinnedMessageContent = GCHandle.Alloc(messageContent, GCHandleType.Pinned);
                Marshal.StructureToPtr(message, pinnedMessageContent.AddrOfPinnedObject(), true);
    cordialement
    Je ne suis pas du tout expert dans ce domaine là du langage. Du coup, je me demande en quoi ta solution est différente de la mienne ?
    C'est le StructureToPtr qui fait mourir mon thread quand j'initialise mon tableau de structure.
    Quand je fais le StructureToPtr pour juste une seule structure, j'ai une exception NotSupportedException

Discussions similaires

  1. pointeur sur structures
    Par Seimaya dans le forum Débuter
    Réponses: 33
    Dernier message: 26/08/2007, 18h13
  2. Réponses: 6
    Dernier message: 07/07/2007, 18h12
  3. pointeur sur structure
    Par julien.63 dans le forum C
    Réponses: 7
    Dernier message: 04/06/2007, 17h50
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 13h17
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

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