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++ -> C#] Struct et arrays


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Inscrit en
    Mars 2006
    Messages
    76
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Par d�faut [C++ -> C#] Struct et arrays
    Bonjour,

    J'ai besoin d'adapter un morceau de code interfa�ant un driver, �crit sous C++, dans le but de faire le fonctionner sous C#. Maintenant, je suis capable de le compiler et le faire travailler sans probl�me sous C++, mais je ne vois pas comment le faire avec C#.

    Bref, la difficult� se trouve en le passe d'une struct comme un param�tre de une fonction C#.

    La struct (qui elle-m�me contient une autre struct) ressemble le suivant:

    Sous 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
    18
    struct {    
    	short s11;    
    	short s12;    
    	short s13;    
    	short s14;    
    	struct2 sa[20]    
    } struct1    
     
    struct{    
    	long l21;    
    	long l22;    
    	long l23;    
    	long l24;    
    	short s21;    
    	short s22;    
    	short s23;    
    	short s24;	    
    } struct2
    Sous C# (En adaptant le type long au type int, pour le faire occuper 4 bytes)
    =======

    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
    18
    struct {      
    	short s11;      
    	short s12;      
    	short s13;      
    	short s14;      
    	struct2 sa[20]      
    } struct1      
     
    struct{      
    	int l21;  		// long sous C++ --> int sous C# (4 bytes)    
    	int l22;      
    	int l23;      
    	int l24;      
    	short s21;      
    	short s22;      
    	short s23;      
    	short s24;	      
    } struct2
    et le fonction est pareille � la suivante:

    Sous C++
    =======

    Declaration...
    -----------------
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int function1 (struct1* pStruct1);
    Appel...
    --------
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int1 = function1 (&pStruct1);		// Une fois la pStruct1 remplie avec les données
    Sous C# (Les probl�mes arrivent):
    ========================

    Declaration...
    -----------------
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    [DllImport(_dllLocation)]            
    public static extern int function1(    
                struct1 pStruct1,    
    );
    Appel...
    -------
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int1 = StaticClass.function1(pStruct1);	// Une fois la pStruct1 remplie avec les données
    ***********************

    J'ai essay� des differentes possibilit�s, mais sans aucun r�ponse satisfaisante

    1) En d�clarant...
    Avant la struct...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [StructLayout(LayoutKind.Sequential, Pack=1, Size=488)] / Size=24)]
    Entre les champs de la struct...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [FieldOffset(0)] / [FieldOffset(2)] / ...
    Je re�ois une erreur
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    HRESULT "(HRESULT Exception: 0x80070057 (E_INVALIDARG))"
    2) En d�clarant...
    Avant le struct array...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [MarshalAs(UnmanagedType.SafeArray,SizeConst=20)
    Je re�ois la m�me erreur

    3) En laissant pStruct d�clar�e seulement, mais sans la remplir avec d'information, la fonction me laisse l'appeler, mais je n'observe pas de fonctionnement.

    Je serais tr�s remerci� de pouvoir recevoir n'importe quelle aide / recommandation, car je me trouve maintenant bloqu� et je ne sais pas comment suivre.

    Merci de vos r�ponses.

  2. #2
    Membre confirm�
    Inscrit en
    Mars 2006
    Messages
    76
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Par d�faut
    R�solu,

    Mais la solution n'a �t� pas �vidente. Il fallait, d�clarer l'array, en lieu de comme un array, comme une suite de types simples, c'est � dire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    struct2 sa00;  
    struct2 sa01;  
    struct2 sa19;
    en lieu de:
    Et apr�s, transformer les pointeurs de la fa�on suivante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    IntPtr intptrstruct = Marshal.AllocHGlobal(Marshal.SizeOf(sa));  
    Marshal.StructureToPtr(sa, intptrstruct, false);
    J'esp�re que ma solution pourra aider quelqu'un.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 01/09/2013, 21h45
  2. Segmentation fault - Struct d'array
    Par AlbinOSG dans le forum C
    R�ponses: 9
    Dernier message: 07/12/2011, 12h46
  3. uniform struct array ?
    Par adtunum dans le forum OpenGL
    R�ponses: 1
    Dernier message: 13/06/2010, 01h39
  4. R�ponses: 1
    Dernier message: 05/06/2007, 18h46
  5. Probl�me avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    R�ponses: 2
    Dernier message: 17/07/2002, 10h25

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