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 :

IntPtr vers Tableau de structures


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut IntPtr vers Tableau de structures
    Bonjour,

    Voilà j'ai un problème qui me bloque dans mon travail et je n'ai pas trouvé de solution.
    J'explique.

    J'ai une fonction C que j'utilise à travers une Dll qui me renvoi un IntPtr. Je n'ai pas accès au code de cette fonction mais selon les spécifications elle doit me retourner un tableau de structures de type Employee

    Donc j'ai essayé :
    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
     
    public Employee[] GetEmployees(int count)
    {
          Employee[] emp = new Employee[count];
     
          IntPtr ptr = GetEmp(); // fonction C
     
          // manque la solution ici : conversion du ptr en un tableau de IntPtr
          IntPtr[] ArrayPtr = ...
     
          for(int i=0; i<count; i++)
          {
                 Marshal.PtrToStructure(arrayptr[i], emp[i]); 
          }
    }
    Bref je recherche la partie manquante dans le code ci-dessus.
    Si vous voyez une solution, car je sèche. Merci d'avance.

  2. #2
    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
    Cela risque d'être difficile sans connaitre la taille de ton tableau.

    Ton pointeur te positionne à un endroit de la mémoire. Tu récupères les données sur une longueur définie (ta structure). (Exception du String qui lit jusqu'au 1er caractère NULL).

    A partir de ton pointeur tu n'as aucun moyen de connaitre la taille du tableau, donc de connaitre la longueur de donnée que tu vas récupérer...

    Ta dll ne te renvoi-t-elle pas d'autres infos qui peuvent être utile ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Je connais la taille de mon tableau : c'est le paramètre "count"

    Mais j'ai trouvé une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Employee[] GetEmployees(int count)
    {
          Employee[] emp = new Employee[count];
     
          IntPtr ptr = GetEmp(); // fonction C
     
          for(int i=0; i<count; i++)
          {
                 IntPtr element = new IntPtr(ptr.ToInt32() + i * Marshal.SizeOf(typeof(Employee)));
                 emp[i] = (Employee)Marshal.PtrToStructure(element, typeof(Employee)); 
          }
    }
    Vous parait-elle correcte ? En tout cas ça fonctionne.
    En espérant que ca puisse servir, j'ai passé toute la journée à trouver

  4. #4
    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
    Oui, en effet, il y avait le paramètre count ^^. J'ai pas fais attention.

    Ta solution me semble correcte.
    Perso, moi j'étais parti sur des méthodes du genre "Marshal.Copy(...)".

    Bonne continuation...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/11/2012, 19h21
  2. lecture d'un fichier texte vers un tableau de structure
    Par syki.mail dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/06/2012, 20h38
  3. Réponses: 5
    Dernier message: 01/04/2012, 20h58
  4. tableau de structures dynamiques C# vers C++
    Par MottetCCSF dans le forum C#
    Réponses: 1
    Dernier message: 17/07/2009, 07h43
  5. structure transtypée vers tableau
    Par J4e8a16n dans le forum Débuter
    Réponses: 16
    Dernier message: 31/05/2009, 05h14

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