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 :

Marshalling C struct en C#


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut Marshalling C struct en C#
    Bonjour.
    Je suis en train d'appeler une dll écrite en C dans du C#. Hors j'ai un problème au niveau d'une des structs.
    En C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct _TCurve
    {
        int       fNumItems;     /* Number of TRatePts in fArray */
        TRatePt  *fArray;        /* Dates & rates */
        TDate     fBaseDate;     /* Discount date */ 
        double    fBasis;        /* Number compounding periods / year */
        long      fDayCountConv; /* How the year fraction is computed */
    } TCurve;
    J'ai tenté ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public struct TCurve
            {
                public int       fNumItems;     /* Number of TRatePts in fArray */
                public ref TRatePt   fArray;        /* Dates & rates */
                public TDate     fBaseDate;     /* Discount date */ 
                public double    fBasis;        /* Number compounding periods / year */
                public long      fDayCountConv; /* How the year fraction is computed */
                //public void     *fClassHandle;  /* C++ class handle implementation */ 
            };
    mais je peux pas declarer TRatePt comme ref...

    En gros comment je fait pour le pointeur sur TRatePt ? TRatePt est defini ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
        TDate  fDate;
        double fRate;
    } TRatePt;
    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par ncheboi Voir le message
    Bonjour.
    Je suis en train d'appeler une dll écrite en C dans du C#. Hors j'ai un problème au niveau d'une des structs.
    En C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct _TCurve
    {
        int       fNumItems;     /* Number of TRatePts in fArray */
        TRatePt  *fArray;        /* Dates & rates */
        TDate     fBaseDate;     /* Discount date */ 
        double    fBasis;        /* Number compounding periods / year */
        long      fDayCountConv; /* How the year fraction is computed */
    } TCurve;
    J'ai tenté ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public struct TCurve
            {
                public int       fNumItems;     /* Number of TRatePts in fArray */
                public ref TRatePt   fArray;        /* Dates & rates */
                public TDate     fBaseDate;     /* Discount date */ 
                public double    fBasis;        /* Number compounding periods / year */
                public long      fDayCountConv; /* How the year fraction is computed */
                //public void     *fClassHandle;  /* C++ class handle implementation */ 
            };
    mais je peux pas declarer TRatePt comme ref...

    En gros comment je fait pour le pointeur sur TRatePt ? TRatePt est defini ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
        TDate  fDate;
        double fRate;
    } TRatePt;
    Merci d'avance
    Alors, j'ai deja fait un truc du genre, je pense que tu peux utiliser directement un pointeur en C# aussi en declarant la structure unsafe, exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public unsafe struct TCurve
            {
                public int       fNumItems;     /* Number of TRatePts in fArray */
                public TRatePt* fArray;        /* Dates & rates */
                public TDate     fBaseDate;     /* Discount date */ 
                public double    fBasis;        /* Number compounding periods / year */
                public long      fDayCountConv; /* How the year fraction is computed */
                //public void     *fClassHandle;  /* C++ class handle implementation */ 
            };
    Cependant, n’oublie pas d'autorisé le code unsafe dans les propriétés de ton projet.

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

Discussions similaires

  1. Marshalling struct décallage 2 bytes.
    Par raphael_kindt dans le forum C#
    Réponses: 11
    Dernier message: 01/09/2011, 16h15
  2. modifier une struct marshallée en C#
    Par small_frenchy dans le forum C#
    Réponses: 1
    Dernier message: 19/09/2010, 14h55
  3. Unrecognized option -fnative-struct
    Par copyallright dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 01/05/2003, 12h25
  4. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  5. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05

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