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 :

passage d'argument C/C#


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Apprenti-Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti-Ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Par défaut passage d'argument C/C#
    Bonjour à tous,

    Je développe actuellement une GUI qui communique avec un micro-contrôleur.
    Tout se passe très bien sauf que :
    j'ai mis en place sur le micro contrôleur un module qui me calcul des CRC16 sur un buffer.
    En C (sur le micro) j'ai donc la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short usComputeCRC16Words(unsigned short* pusBuffer, ulong ulCount)
    je peux donc l'utiliser sur n'importe quel tableau de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct FloatStruct
    {
        float f1;
        float f2;
    };
     
    struct FloatStruct structTab[5];
    .
    .
    .
    .
    usComputeCRC16Words((unsigned short*)structTab,5*sizeof(FloatSTruct))
    Et cela marche très bien.
    Mon problème vient du fait que j'ai repris le même code pour calculer mon CRC en C#. Sauf que j'ai du modifier les arguments de mes fonctions pour les adapter au C#. Typiquement la fonction précédente devient, en C#,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ushort usComputeCRC16Words(ref ushort[] pusBuffer, ulong ulCount)
    J'ai ensuite la même structure que dans le code C mais le problème est que je ne sais pas comment passer mon tableau de structure a cette fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usComputeCRC16Words((ushort[])structTab, .....)
    Ne fonctionne pas et cela me parait logique.
    Mais alors, comment puis-je passer ce paramètre ? Dois-je déclarer un explicit operator dans ma structure ? Ou autre ?
    Je sais que je pourrais reprendre les même fonctions qu'en C (avec les pointeurs) en utilisant un context unsafe mais je voudrais savoir si il existe une autre méthode.

    Merci à vous.

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Il te suffit d'utiliser le mot-clé ref
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usComputeCRC16Words(ref (ushort[])structTab, .....)

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti-Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti-Ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Il te suffit d'utiliser le mot-clé ref
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usComputeCRC16Words(ref (ushort[])structTab, .....)
    Oui c'était un oubli de part désolé.

    Mais ce n'est pas la solution car j'ai le même message d'erreur à la compilation

    Cannot convert type 'WaveformPoint[]' to 'ushort[]'

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjour,

    L'erreur de cast est normal, C# utilise un typage fort contrairement au C.
    Pour faire ton operation tu dois d'abord réelement transformer ton tableau de structure en tableau de "byte".
    Marshal.StructureToPtr devrait répondre a ton besoin.

    Tu pourrais par la meme occastion d'effinir une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ushort usComputeCRC16Words(object toCompute)
    Qui se chargerai de l’opération de marshaling et appellerai ton autre méthode

Discussions similaires

  1. passage d'argument sur l'imprimante
    Par linux dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 07/10/2005, 16h25
  2. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  3. [TASM] Passage d'argument à une macro
    Par sorry60 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/04/2005, 18h22
  4. [web] passage d'arguments à un CGI
    Par ma2th dans le forum Web
    Réponses: 4
    Dernier message: 20/08/2004, 12h18
  5. passage d'argument à la procédure main ()
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 01/09/2003, 19h59

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