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 une variable char * en une variable de type LPCTSTR


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Convertir une variable char * en une variable de type LPCTSTR
    Bonjour,

    Pour un projet je doit afficher une variable dans l environnement GDI, pour se faire j'utilise la fonction TextOut(...). J arrive a afficher correctement une chaine de caractere entré directement dans la fonction mais lorsque j essaye avec une variable cela ne fonctionne pas.

    La version qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextOut(HDC,100,100, _T("chaine"),13);
    Ce que je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int entier = 7 ; // cette valeur pourrait changer
    char chaine [4];
    sprintf(chaine, "%d" , entier);
    TextOut(HDC,100,100, _T(chaine),13);
    Mais j ai une erreur me disant pour la fonction _T(...) : Identifier "Lchaine is undefined.

    Merci d'avance pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Pourquoi ne pas utiliser les fonctions de tchar.h de bout en bout ?
    (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TCHAR chaine [4];
    _stprintf(chaine, "%d" , entier);
    TextOut(HDC,100,100, chaine,13);

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Identifier "Lchaine is undefined.
    _T est une macro qui ajoute le L devant la chaîne pour la transformer en LPCTSTR.

    je pense qu'utiliser des LPCTSTR tout le temps serait le plus simple.

    Cela dit, Google m'a fourni ce lien qui possède ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdlib.h>
     
    #if defined(UNICODE)
    #define my_mbstotcs(tcs,mbs,count) mbstowcs((tcs),(mbs),(count))
    #define my_tcstombs(mbs,tcs,count) wcstombs((mbs),(tcs),(count))
    #else
    #define my_mbstotcs(tcs,mbs,count) strcnpy((tcs),(mbs),(count)) 
    #define my_tcstombs(mbs,tcs,count) strcnpy((mbs),(tcs),(count))
    #endif
     
    // usage: 
    // const char* in = "this is a test";
    // LPCTSTR out = new TCHAR[strlen(in)+1];
    // my_mbstotcs(out, int, strlen(in)+1);
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    J ai pas d'erreur marqué sur le TextOut par contre j en ai une sur _stprintf que je ne comprend pas tres bien : "Error: no instance of overloaded function "swprintf" matches the argument list"

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Et quel est ce code erroné utilisant _stprintf ?

    Surtout que le message est pourtant clair.

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx
    http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour les liens, j avais écrit le define dans le mauvais sens...

    Malheureusement _stprintf ne fonctionne pas comme ca en tout cas. Donc j ai regardé mais je ne voix pas ou je dois mettre mon entier pour le convertir.

    Merci de votre aide

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Rappel en C++ on utilise les flux :
    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
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <windows.h>
     
    int main()
    {
        int const entier = 7;
        std::wostringstream woss;
        woss<<entier;
        std::wstring const chaine = woss.str();
        HDC h=0;
        TextOut(h,100,100,chaine.c_str(),13);
     
        return 0;
    }

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci 3DArchi,

    Ta solution fonctionne parfaitement.

  9. #9
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Pour rester dans l'esprit TCHAR, en gardant les flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main()
    {
        int const entier = 7;
        std::basic_ostringstream<TCHAR> toss;
        toss<<entier;
        std::basic_string<TCHAR> const chaine = toss.str();
        HDC h=0;
        TextOut(h,100,100,chaine.c_str(),13);
     
        return 0;
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

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

Discussions similaires

  1. Utiliser une variable char dans une condition
    Par cedriclv dans le forum C
    Réponses: 6
    Dernier message: 11/06/2014, 18h38
  2. Modif d'une variable char* dans une fonction
    Par kase74 dans le forum Débuter
    Réponses: 4
    Dernier message: 22/01/2009, 08h31
  3. Réponses: 27
    Dernier message: 03/01/2008, 11h07
  4. [Smarty] nom de variable composé d'une chaîne et d'une variable
    Par Philoulheinz dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 17/05/2007, 10h13
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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