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 :

Convertir unichar en char


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Convertir unichar en char
    Bonjour,

    je développe un plugin 4D en C++ et j'ai besoin de récupérer la valeur passé en paramètre dans 4D.
    Quand je fais juste strcpy mon char renvoi seulement un caractère.
    Comment faire pour mettre un unichar dans un char?

  2. #2
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Qu'est qu'un unichar ?
    Si tu est sous windows, avec VS. Tu as les char(1octets) et les wchar_t(2octets). La macros Windows TCHAR permet en fonction des directives compilation de choisir soit l'un soit l'autre.
    En STL tu as std::string et std::wstring a convertir avec std::copy.
    En C tu as des fonctions comme wctomb, mbtowc.
    L'API Windows fournir des fonctions comme MultiByteToWideChar...

    Montre nous les prototypes de tes fonctions, pour comprendre quels types elle attende et pourquoi tu dois faire des conversions.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Donc le truc c'est que je récupère des valeur provenant de 4D.
    voila comment je l'ai récupère dans visual studio:

    PA_Unichar* CodeCPS_uchars;
    PA_Unistring* CodeCPS;
    PA_Unichar* returnValue_uchars;

    CodeCPS = PA_GetStringParameter( params, 1 );
    CodeCPS_uchars = PA_GetUnistring( CodeCPS );

    la valeur est de CodeCPS_uchars.
    Lorsque je veux visualiser ce qu'il y a dedans avec une messagebox je vois tout apparaitre.
    Le seul souci ce que quand je fait un strcpy pour mettre cette valeur dans une autre variable, ça met que le premier caractère seulement.

  4. #4
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    les PA_Unichar doivent etre des type def vers des wchar_t.
    Donc tu devrais compiler ta solution en Unicode : VS: configuration Charset Use Unicode Character Set.
    Quand tu vas appeler MessageBox cela vas renvoyer vers MessageBoxW.
    Par contre il ne faut pas utiliser strcpy mais sa version unicode wcscpy.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci ça marche super bien.
    Cela fonctionne-t-il dans l'autre sens?? Car je doit renvoyer un PA_uchars.

  6. #6
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Il faut que tu comprenne ce que tu fais. Si 4D et ton plugin est en Unicode tu n'as pas besoin de faire des conversions, mais seulement d'utilisé des fonctions Unicode.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Alors le truc c'est que j'ai mit des messages d'erreur.

    Quand j'utilise
    wcscpy(tcPINCode, CodeCPS_uchars);
    ça fonctionne très bien, car avec une messagebox je vois très bien que tcPINCode = CodeCPS_uchars.
    mais quand je l'utilise ensuite dans cette fonction

    S_hinstApiLecResult = Lec_ControleCPS (pusNoSession,&tcPINCode,&tcDateFinValidite,&szIdentApplication,&tcTypeCarte,&pcPresentPINCode,&tcCategorie,&pusCodeErreur);

    le message d'erreur me renvoi que le code est incorrect.
    Alors que si je n'utilise pas

    wcscpy(tcPINCode, CodeCPS_uchars);

    et que au debut je déclare

    char tcPINCode[4]="1234";

    ça fonctionne très bien.

  8. #8
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    D'après ftp://sigmasoft.fr/depot/conf/api_lec.h, le prototype de la fonction utilise des char. Il faut donc soit trouvé la version unicode de cette lib soit faire des conversions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char tcPINCode[5];
    wchar_t CodeCPS_uchars[5] = L"1234"; //Attention 5 et pas 4 !
    // => 1 argument destination , 2eme source!
    wcstombs(tcPINCode, CodeCPS_uchars);
    Sinon ne cast pas tes chaines de carataire et regarde les warnings que le compilateur t'affiche, normalement il ne voudrai jamais faire une conversion automatique de char* en wchar_t*.
    Donc en gros tu as beaucoup de taff bien lourd a convertir vers ton API en char, et les retours en wchar_t.
    ATTENTION! on ne peut utiliser wcscpy pour convertir des char* en wchar_t* !
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bon je te remercie du temps que tu as passé sur mon cas. J'ai enfin trouvé la solution,

    WideCharToMultiByte( CP_ACP, 0, CodeCPS_uchars, -1, tcPINCode, 5, NULL, NULL );

    tout fonctionne correctement avec ça.

    Merci encore.

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

Discussions similaires

  1. Convertir String en Char
    Par El-Diablo- dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/04/2007, 17h20
  2. [SQL2K] Convertir un champ Char Vers un champ Date
    Par Sidi-Bou dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/01/2007, 08h45
  3. [unicode] Convertir CString en Char[]
    Par dacid dans le forum Visual C++
    Réponses: 7
    Dernier message: 31/05/2006, 09h22
  4. Convertir String en Char: comment?
    Par nmathon dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2005, 20h58
  5. Réponses: 13
    Dernier message: 06/03/2005, 15h21

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