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

Windows Forms Discussion :

Structure et pointeurs


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Ingénieur de développement
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de développement

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 96
    Points
    96
    Par défaut Structure et pointeurs
    Bonjour à tous.

    Je dois m'interfacer avec une DLL C++, mais j'ai un doute sur une des fonctions avec laquelle je dois échanger des paramètres sous forme de structure :

    La structure zn C:
    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
    struct _ImageInfo
    {
    	unsigned int	cbSize;
    	unsigned int	imageWidth;
    	unsigned int	imageHeight;
    	unsigned int	planes;
    	unsigned int	imagePitch;
    	unsigned int	reserved;
    	//
    	unsigned char*  buffer;
    	unsigned int	sw;
    	unsigned int	hw;
    	unsigned int	camUID;
    	//
    	unsigned int	uiTimestampHigh;
    	unsigned int	uiTimestampLow;
    };
    Mon souci est avec le unsigned char* buffer;
    Comment le coder dans la structure en C# ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu dois utiliser le pointeur c# :IntPtr
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Tu dois utiliser le pointeur c# :IntPtr
    Non.
    Ou, du moins, ce serait introduire une complication totalement inutile alors que l'Interop fournit assez de sources de problèmes comme cela sans avoir à en rajouter soi même

    Il déclare dans sa structure C# une string ou un byte array, et met sur l'élément de la structure l'attribut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MarshalAs(UnmanagedType.LPStr)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MarshalAs(UnmanagedType.LPArray)
    suivant le choix qu'il a fait.

    Dans le cas de LPArray il faut spécifier la longueur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [MarshalAs(UnmanagedType.LPArray, SizeConst=XXXX)]
    dans le cas de LPStr, on considére la terminaison null : ici un cas ou l'autre suivant les spécifications du contenu de son tableau de byte.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre régulier
    Profil pro
    Ingénieur de développement
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de développement

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 96
    Points
    96
    Par défaut
    Donc dans le cas où je passer un pointeur sur un buffer à la fonction C,


    Donc, ma structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public struct _ImageInfo    
    {
        ...
        IntPtr pBuffer;        // unsigned char*  buffer;
        ...
    }
    Allocation de la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _ImageInfo  MaStructure;


    Allocation d'un buffer (100 octets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStructure.pBuffer = Marshal.AllocHGlobal(100);




    La fonction C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int get_ImageInfo(_CameraInfo& cameraInfo);
    Déclaration C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("xxxx.dll")]
    public unsafe static extern Int32 ImageInfo(    ????   );

    Là j'ai pas d'idée !!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("xxxx.dll")]
    public unsafe static extern Int32 ImageInfo(ref MaStructure);

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    - Tout d'abord :

    Sinon c'est illisible.
    Donc, edite tes message et utilise la balise en question.

    Ensuite je t'invite à relire ce que j'ai écrit.

    De plus,la signature de fonction que tu fournis fait appel, si je ne me trompe pas car c'est vraiment lointain dans le temps, à une réference C++, pas un pointeur.
    Or, les références sont, sauf erreur de ma part, un concept "fermé" du C++, et je ne suis pas sur qu'elles soient supportées par l'interop. (mais là je laisse la parole aux spécialistes de la chose, je ne suis pas sur du tout de mon coup).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non.
    Ou, du moins, ce serait introduire une complication totalement inutile alors que l'Interop fournit assez de sources de problèmes comme cela sans avoir à en rajouter soi même
    Ça me rappelle ma période de programmeur C/C++ (Le bon vieux temps? pas sûr !)
    Ta méthode est intéressante, jamais essayé, j'y penserais lors de mon prochain interop (ce qui doit arriver 1 fois par an...)
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

Discussions similaires

  1. Structures et pointeurs
    Par Tchetch dans le forum C
    Réponses: 14
    Dernier message: 19/10/2006, 13h30
  2. Structure et pointeur
    Par Nalido dans le forum C
    Réponses: 5
    Dernier message: 08/08/2006, 15h08
  3. Copie de structure par pointeur - Problème LSB MSB
    Par the_ionic dans le forum Réseau
    Réponses: 4
    Dernier message: 17/07/2006, 15h08
  4. Structures et pointeurs
    Par mastochard dans le forum C
    Réponses: 17
    Dernier message: 25/05/2006, 11h55
  5. [structure et pointeur] problème d'affichage
    Par kitsune dans le forum C
    Réponses: 17
    Dernier message: 22/03/2006, 22h20

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