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 :

Conversion de LPTSTR vers TCHAR


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut Conversion de LPTSTR vers TCHAR
    Hello all !
    Je viens vers vous car j'ai un soucis (qui l'eût crû...) :
    J'ai un LPTSTR DirectParam ; j'ai aussi un TCHAR *AHK_GUIClass qui est - par défaut - égal à L"AHKClass".
    Dans certains cas, j'ai besoin d'avoir AHK_GUIClass égal à DirectParam.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // plus tôt dans le code, on a :
    TCHAR *AHK_GUIClass = _T("AHKClass");
    //Là, on a :
    LPTSTR DirectParam;
    //blablabla, ici on assigne une valeur à DirectParam (tout marche bien)
    //plus loin :
    AHK_GUIClass = (TCHAR*)DirectParam;
    Mais là, la fenêtre ne se créé pas. En revanche, si on force la main à AHK_GUIClass :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = L"Hello";
    Tout va bien, la classe de la fenêtre est bien ce qu'on a demandé ("Hello").
    Comment dois-je convertir le LPTSTR en TCHAR (enfin, WCHAR_T puisque je suis en unicode) ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    je me perds à chaque fois dans tous ces types, mais
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    si je ne me trompe pas, si tu es en unicode, alors ton LPTSTR est un LPWSTR qui est lui-même un WCHAR* et donc un wchar_t*
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Malheureusement, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = DirectParam
    Je n'arrive plus à enregistrer la classe de la fenêtre (http://msdn.microsoft.com/en-us/libr...v=vs.85).aspx)
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = (TCHAR*)DirectParam
    Même chose, et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = (TCHAR*)DirectParam[0]
    Ca marche ! Mais la classe n'est pas valeur spécifiée (pour AHK_GUIClass qui vaut "NFH", la classe est #78
    Avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = DirectParam[0]
    Le compilateur me dit "error C2440: '='*: impossible de convertir de 'WCHAR' en 'TCHAR *'", puis me conseille de faire un cast

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    ENCORE plus d'hilarité matutinale :
    En essayant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AHK_GUIClass = _T(""+parameter[0]);
    La classe de la fenêtre devient.... "age monitor". Ce n'est ni ce que j'attendais, ni un texte présent dans mon code...

    EDIT : En fait, si on met "NFH" à l'endroit où j'écris la classe souhaitée, j'obtiens bien "age monitor". Si on met "LOUP", on a "ssage monitor". Le texte "message monitor" n'est présent qu'une fois dans mon code, mais je ne comprends pas pourquoi il atterrit là....

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Tu ne dis pas le type de AHK_GUIClass

    J'ai regardé sur les Internets et en gros:
    1) (@Bousk) LPTSTR -> TCHAR* -> Unicode -> WCHAR* -> wchar_t*
    2) TCHAR -> Unicode -> WCHAR -> wchar_t

    Donc si AHK_GUIClass est un pointeur (soit TCHAR* soit LPTSTR) AHK_GUIClass = DirectParam devrait fonctionner, tant que DirectParam est en vie

    Essayes éventuellement de passer par les macros de conversion A2W pour forcer l'Unicode.

    Et essayes un test style if (sizeof(char) == sizeof(TCHAR)) { /* ANSI */ } else { /* Unicode */ }

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Oups ! En fait WindowClassGUI et AHK_GUIClass sont identiques (dans mon code, c'est AHK_GUIClass partout)
    Donc AHK_GUIClass est déclarée comme suit :
    TCHAR *AHK_GUIClass;

Discussions similaires

  1. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48
  2. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 09h28
  3. [Think Pascal] Portage/conversion Think Pascal vers MAC/Windows/Linux
    Par Alain Vitry dans le forum Autres IDE
    Réponses: 1
    Dernier message: 19/03/2005, 11h24
  4. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 22h55

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