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 :

[débutant C#] Comment récupérer un char en c#?


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut [débutant C#] Comment récupérer un char en c#?
    Bonjour à tous,

    Une autre question, quelle est la meilleure solution pour récupérer un tableau de caractère, transmis par une fonction C, depuis mon code C# ?
    Puis comment afficher les différents caractères sur la console par exemple?

    merci pour votre aide.

  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
    Citation Envoyé par Gab02 Voir le message
    Une autre question, quelle est la meilleure solution pour récupérer un tableau de caractère, transmis par une fonction C, depuis mon code C# ?
    Ca dépend... poste la signature de la fonction C pour qu'on puisse te dire

    Citation Envoyé par Gab02 Voir le message
    Puis comment afficher les différents caractères sur la console par exemple?
    Console.Write ou Console.WriteLine

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Points : 152
    Points
    152
    Par défaut
    Pour répondre a ta question, tu peux récupérer un Char de plusieurs manière :
    Si tu as une string, il existe la méthode ToCharArray.
    Sinon u peux utiliser les méthodes de la classe Encoding, elles offrent les meilleurs performance niveau traitement. cf :
    http://msdn.microsoft.com/en-us/libr....encoding.aspx
    http://msdn.microsoft.com/en-us/libr...g_members.aspx

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Tout d'abord merci.

    En fait j'ai fais un callback qui utilise ma fonction C# à partir du C
    Le C me retourne donc un tableau de caractère.

    C# fonction callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static int CallBackMethod(string Data)

  5. #5
    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
    OK, mais c'est pas ça que je te demandais... je voulais voir la signature (prototype) de la fonction C

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par tomlev Voir le message
    OK, mais c'est pas ça que je te demandais... je voulais voir la signature (prototype) de la fonction C
    Voilà le prototype de la fonction C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GDCallback(int32_t iNb, callbackGD_f *pfn)

  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
    C'est quoi le type de retour ? callbackGD_f, c'est un pointeur de fonction ?

    Essaie de donner tous les éléments, parce que si tu les donnes au compte-goutte on est pas sortis de l'auberge

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Voici la méthode 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
    result GDCallback(int32_t iNb, callbackGD_f *pfn)
    {
    static const char szFctName[] = "GDCallback";
    int32_t           i           ;
    char              String[15];
     
       for (i = 0; i < iNb; i++)
       {
          sprintf(String, "Elt[%2d]", i);
          pfn(String); //appel de la fonction C# 
       }
     
       return E_OK;
    }
    le type de retour est un Enum


    Coté 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
     
    private void GD()
            {
                GT.SDataCallback CB = new GT.SDCallback(CallBackMethod);
                GT.GDCallbackTest(5, CB);
     
            }
     
    public delegate int SDCallback (string dData); 
     
    public static int CallBackMethod(string Data)
            {
                Console.WriteLine(Data);
                return 0;
            }
    Je pense avoir fourni le nécessaire cette fois.

    Merci pour ton aide

  9. #9
    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 Gab02 Voir le message
    Je pense avoir fourni le nécessaire cette fois.
    effectivement je crois que tu as donné toutes les infos utiles

    Par contre, maintenant je comprends plus vraiment ta question : ton code a l'air correct, je suppose qu'il fonctionne, donc qu'est-ce que tu n'arrives pas à faire ?

    Si c'est pour la récupération des caractères de la chaine, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string s = ...
    foreach(char c in s)
    {
        ...
    }
    Ou encore, pour accéder à un caractère spécifique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = s[2]; // 3e caractère

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Par contre, maintenant je comprends plus vraiment ta question
    Le problème est que je récupère quelque chose dans mon string mais ça "???]" alors que je devrais avoir "Elti".

    Problème de conversion ?

  11. #11
    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
    OK... bizarre
    Y a un truc que je comprends pas trop : comment est défini callbackGD_f ?

    J'ai essayé de reproduire le problème et je l'ai déclaré comme ça :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (*callbackGD_f)(char*);
    (i.e. un pointeur de fonction qui prend une chaine de caractère et renvoie un int)

    Mais ça colle pas avec la façon dont tu l'utilises dans GDCallback : il faudrait que pfn soit de type callbackGD_f, et non callbackGD_f*

    Tu peux montrer aussi le typedef de callbackGD_f ? Je vais voir si j'arrive à faire marcher ça

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Voici le typedef:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void callbackGD_f(string_t string);
    J'ai également un typedef qui défini un char* comme string

    Pour info je l'ai testé avec un entier ça fonction correctement.

    merci

  13. #13
    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
    Côté C#, la signature du delegate ne correspond pas à celle du callback C (le type de retour est int et non void). C'est peut-être de là que vient le problème...

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Merci, je vais tester

    Oui mais comment expliquer que ça fonctionne correctement quand je doit récupérer un entier.


    Tester et toujours le même souci je récupère le string mais pas des caractères correct. De plus j'ai testé avec un byte[] et là il ne rentre même pas dans la fonction CallBackMethod.

    D'autres idées.

  15. #15
    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
    bizarre... j'ai fait le test chez moi, et je récupère bien "Elt[ 0]", "Elt[ 1]", etc

    Par contre à chaque appel du callback je me prends une erreur en debug :

    Runtime check failure #0 - The value of ESP was not properly saved across a function call. This is usually the result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

  16. #16
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Par contre ton erreur m'intéresse vu qu'on ce type de méthode sur des cibles différentes.

    Par contre peux tu me transmettre ce que tu fais que je puisse comparer

    Merci bien pour ton aide

  17. #17
    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 Gab02 Voir le message
    Par contre peux tu me transmettre ce que tu fais que je puisse comparer
    Je l'ai pas sous la main, c'est sur mon PC du bureau... J'essaie de t'envoyer ça lundi

  18. #18
    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
    Voilà mon projet de test, avec l'erreur que j'avais mentionnée. Je sais pas si ça t'aidera beaucoup mais on sait jamais
    Fichiers attachés Fichiers attachés

  19. #19
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Je crois que j'ai omis une info plutot importante. L'application tourne sur du CE 5.0 et je développe avec le CF 2.0.

  20. #20
    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 Gab02 Voir le message
    Je crois que j'ai omis une info plutot importante. L'application tourne sur du CE 5.0 et je développe avec le CF 2.0.
    ah oui effectivement, c'est un détail de taille
    je connais pas trop les spécificités du CF, donc si le problème est lié à ça je peux pas grand chose pour toi...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [C# - Débutant] comment créer tableau char *
    Par moulefrite dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/12/2008, 14h41
  2. Réponses: 2
    Dernier message: 07/03/2008, 10h52
  3. Réponses: 1
    Dernier message: 09/09/2007, 12h09
  4. [Débutant] comment récupérer la valeur d'une requête?
    Par Athorus dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/02/2007, 17h59
  5. Réponses: 6
    Dernier message: 15/02/2007, 13h46

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