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++Builder Discussion :

E2034 Impossible de convertir 'const char *' en 'const wchar_t *'


Sujet :

C++Builder

  1. #1
    Membre habitué

    Homme Profil pro
    Responsable Informatique Industrielle
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Informatique Industrielle
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut E2034 Impossible de convertir 'const char *' en 'const wchar_t *'
    Si vous mettez à jour vos programmes vers CodeGear C++Borland 2009, vous trouverez peut être cette erreur :

    E2034 Impossible de convertir 'const char *' en 'const wchar_t *'

    Voici un exemple de code pour cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application->MessageBoxA(AnsiString("Impossible d'ouvrir le fichier "+AnsiString(nom)).c_str(),"erreur",MB_OK);
    Voici la correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBoxA(NULL,AnsiString("Impossible d'ouvrir le fichier "+AnsiString(nom)).c_str(),"erreur",MB_OK);
    La correction marche aussi pour MessageBox, l'astuce est de ne pas oublier NULL, et d'enlever Application->

    En espérant que cela aide d'autres personnes.

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Si tu veux le même comportement il ne faut pas mettre NULL mais Application->Handle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBoxA(Application->Handle,AnsiString("Impossible d'ouvrir le fichier "+AnsiString(nom)).c_str(),"erreur",MB_OK);
    Si tu veux que ton programme soit un peu plus Unicode il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        String nom;
        MessageBoxW(Application->Handle,String("Impossible d'ouvrir le fichier "+nom).w_str(),L"erreur",MB_OK);
    Par défaut String = UnicodeString dans CodeGear C++Borland 2009
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined(_DELPHI_STRING_UNICODE)
        typedef UnicodeString        String;           //
    #else
        typedef AnsiString           String;           //
    #endif

  3. #3
    Membre habitué

    Homme Profil pro
    Responsable Informatique Industrielle
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Informatique Industrielle
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut merci
    merci pour le complément d'informations

  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut Utilisation de MessageBoxIndirect sous C++Builder
    Une autre façon de faire afficher un Message Box est d'utiliser MessageBoxIndirect. L'avantage est que l'on peut mettre un icône personnalisé. Voici un exemple simple avec un icône standard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TMsgBoxParams BoxParam;
    BoxParam.cbSize = sizeof(TMsgBoxParams);
    BoxParam.hwndOwner = Application->Handle;
    BoxParam.hInstance = NULL; // Set to NULL for standard system-defined icons
    BoxParam.lpszText = L"Impossible d'ouvrir le fichier.";
    BoxParam.lpszCaption = L"Erreur";
    BoxParam.dwStyle = MB_OK | MB_USERICON; // MB_USERICON is needed for using lpszIcon
    BoxParam.lpszIcon = MAKEINTRESOURCEW(IDI_ERROR);
    BoxParam.dwContextHelpId = 0;
    BoxParam.lpfnMsgBoxCallback = NULL;
    BoxParam.dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
    MessageBoxIndirectW(&BoxParam);
    Voici la liste des icônes standards:
    • IDI_APPLICATION: Default application icon.
    • IDI_ASTERISK: Same as IDI_INFORMATION.
    • IDI_ERROR: Hand-shaped icon.
    • IDI_EXCLAMATION: Same as IDI_WARNING.
    • IDI_HAND: Same as IDI_ERROR.
    • IDI_INFORMATION: Asterisk icon.
    • IDI_QUESTION: Question mark icon.
    • IDI_WARNING: Exclamation point icon.
    • IDI_WINLOGO: Windows logo icon. Windows XP: Default application icon.
    • IDI_SHIELD: Security Shield icon.


    Pour utiliser la version ANSI il suffit d'enlever les W à la fin des fonctions et de mettre du texte sans le L devant.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/01/2011, 07h34
  2. Réponses: 12
    Dernier message: 03/09/2009, 03h06
  3. convertir un ansistring en const char*
    Par Freud44 dans le forum Débuter
    Réponses: 13
    Dernier message: 13/11/2008, 17h59
  4. Convertir un (char *) en (const char *) dans C++
    Par anas.eh dans le forum C++
    Réponses: 10
    Dernier message: 03/09/2007, 13h59
  5. Convertir un "char" en "CONST char"
    Par N3odyme dans le forum C
    Réponses: 3
    Dernier message: 17/08/2006, 19h48

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