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++/CLI Discussion :

c# : envoyer un pointeur de structure a une fonction native


Sujet :

C++/CLI

  1. #1
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut c# : envoyer un pointeur de structure a une fonction native
    Bonjour

    J'ai deja pas mal travailler avec le pinvoke et je suis toutjours arrive a mes fin mais la je coince.

    Voila j ain dans une dll native en c , 2 structures et 1 fonction que je n'arrive pas a utiliser en C#.

    Struct 1 : liste de struc 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct groupe{
       int num;
       element **liste;
    } GROUPE;
    struc 2 : element de la struc 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct element{
       int valeura;
       int valeurb;
       int * liste_element_similaire; // represente une liste d'index d'element dans la struc groupe de base
       int nombre_element_similaire;
    } ELEMENT;
    Ensuite j'ai une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int alloc(GROUPE **ogroupe,unsigned char *idata);
    En c , j appel cettte fonction qui m initialise la structure GROUPE et ensuite j ai une autre fonction free_groupe pour liberer la memoire,

    Coment je peux utiliser tout ca en C#. Mon plus gros probleme se situe dans la liste d element dans la struct element, je ne sais pas comment definir la strucuture en C# avec les attribut FieldOffset car je ne sais pas combien il y aura d element au depart.

    Merci d'avance

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    je ne sais pas comment definir la strucuture en C# avec les attribut FieldOffset car je ne sais pas combien il y aura d element au depart.
    Peu importe le nombre d'éléments. Les éléments ne sont pas stockés dans la structure, puisque liste_element_similaire est un pointeur. Donc liste_element_similaire fera toujours la taille d'un pointeur, soit 4 octets sur un système 32 bits (8 octets sur un système 64 bits).
    Enfin, il me semble en tous cas...

  3. #3
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut
    oui c est logique mais et pour element **liste , j utilise un ref intptr alors ?

    et surtout , je ne connait pas le nombre d'element avant appel de la fonction.

  4. #4
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ZashOne Voir le message
    oui c est logique mais et pour element **liste , j utilise un ref intptr alors ?
    J'aurais dit un simple IntPtr... mais bon, j'avoue qu'avec un pointeur de pointeur je commence à être un peu perdu

    Tu as regardé un peu la classe Marshal ? Elle contient plein de méthodes pour faciliter le marshalling des données entre natif et managé...

  5. #5
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut
    oui j ai le nez dans la msdn depuis quelques heures

    En premiere approche j ai ecrit une fonction c dans une autre dll qui appelle cette fonction mais qui demande juste des pointeur simple ensuite apres appel je reconstruit mon tableau de structure avec des boucles for.

    J'arrive deja a appele ma fonction depuis .net sans avoir d'erreur "tentative d'ecriture .... memoire corrompue"

    Par contre ce qui est bizarre c'est que apres appel mon tableau de structure n'a pas eu ses valeurs modifiees dans mon appli .net , tout est a 0. Je vais y regarder de plus pres et si je trouve la solution ou que je coince total je reposterai ici.

  6. #6
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut
    bon et bien avec auelque bricolages , j ai pu resoudre mon probleme ,


    1 pour les pointeur de pointeur , j ai ecrit une petite fonction c qui demande uniquement un pointeur simple, qui appelle ensuite la fonction et puis effectue le travaille necessaires avec des boucles for.

    2 pour le probleme des tableau de structure ,

    En fait les tableau de structure et de classe doivent etre precede de [OUT] dans la declaration de la fonction sinon les modifications sur le tableau ne sont pas repercutes.

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Bien vu
    Par contre pour le point 1, je pense qu'il doit y avoir moyen de gérer ça sans écrire du code C... ça m'étonnerait que MS n'ait pas prévu le cas des pointeurs de pointeur...

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

Discussions similaires

  1. [JNA] - Pointeur de structure dans une autre structure
    Par John.BE dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 24/02/2012, 15h02
  2. Passage d'une structure dans une fonction
    Par god_enel dans le forum C
    Réponses: 8
    Dernier message: 22/01/2007, 15h35
  3. structure dans une fonction
    Par isma92 dans le forum C
    Réponses: 14
    Dernier message: 03/12/2006, 23h47
  4. passé une structure a une fonction
    Par M.a.n.u. dans le forum C
    Réponses: 24
    Dernier message: 30/04/2006, 15h47
  5. Passer une structure dans une fonction ...
    Par pilouface dans le forum C
    Réponses: 4
    Dernier message: 03/04/2006, 01h00

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