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 :

wstring en Multibyte Character Set


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut wstring en Multibyte Character Set
    Bonjour ,

    J'ai un projet réglé sur Multibyte Character Set avec Visual C++2005 et je souhaiterais addapter un code source qui lui est réglé sur Unicode Character Set ...


    Les erreurs ont lieu ici:

    [device.h]:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    wstring	m_device_path_name;
    ...
    T device
    device.m_device_path_name = detailData->DevicePath;


    error C2679: binary no operator found wich takes a right-hand operant of type 'CHAR[1]


    modifié ça donne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 TCHAR* m_device_path_name;


    [device.cpp]:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wstring empty = _T("");
    device.m_event_object = CreateEvent (NULL, TRUE, TRUE, empty.c_str());

    ...modifié donne:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     LPCSTR  empty =reinterpret_cast<LPCSTR>("");// L"";
    device.m_event_object = CreateEvent (NULL, TRUE, TRUE, empty);


    Au final, ça compile mais pendant l'execution ça finit par planter :


    Unhanced exeption at 0x7c812aeb in Test.exe...std::exception at memory location 0x0013f764

    Pourriez-vous m'aider à y voir plus clair dans l'adaptation d'un code Unicode vers Multibyte, avec les wstring, TCHAR, LPCTSTR...?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    le plus simple serait d'utiliser directement une std::string de TCHARs.
    En clair, une std::basic_string< TCHAR >. Comme ça, selon tes options, ce sera une string ou une wstring...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Ok, donc après modifications ça donne,

    .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //wstring m_device_path_name; 
    basic_string< TCHAR >m_device_path_name;

    .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //wstring empty = _T("");
    basic_string< TCHAR >empty = "";
     
    device.m_event_object = CreateEvent (NULL, TRUE, TRUE, empty.c_str());
    ...ça compile, mais le bug revient ,
    avec 2 fenêtres d’alerte:

    1 :

    ERROR ! Autoexp.dat :line(1914) for tagPROPVARIANT|tagVARIANT|PROPVARIANT|VARIANT : Expected ‘)’ to end
    #default block
    ERROR ! Autoexp.dat :line(1914) for tagPROPVARIANT|tagVARIANT|PROPVARIANT|VARIANT : Child rule failed to parse ‘)’ to end
    ERROR ! Autoexp.dat :line(1914) for tagPROPVARIANT|tagVARIANT|PROPVARIANT|VARIANT : Failed to match ‘)’ to end


    2:
    Unhanced exeption at 0x7c812aeb in Test.exe...std::exception at memory location 0x0013f764


    ...hum, une idée ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Le bug n'a rien à voir avec le sujet de la discussion mais avec des appels de fonctions désordonnées ;-)

    Donc, j'ai remis tout ça dans l'ordre et c'est résolu
    merci

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

Discussions similaires

  1. Character set
    Par SebCBien dans le forum Débuter
    Réponses: 1
    Dernier message: 29/12/2004, 15h22
  2. Réponses: 17
    Dernier message: 07/10/2004, 18h05
  3. Problème avec accents et CHARACTER SET ISO8859_1
    Par kinda dans le forum InterBase
    Réponses: 13
    Dernier message: 30/10/2003, 15h49
  4. IB 6.0.1 - Win XP - Character Set
    Par SuperTotor dans le forum InterBase
    Réponses: 4
    Dernier message: 03/06/2003, 20h25
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

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