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 :

MessageBox et C++Builder 2009


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut MessageBox et C++Builder 2009
    Bonjour,
    j'ai découvert un problème avec le composant de la VCL MessageBox.
    J'ai un programme qui a été compilé avec BDS2007. Il comporte la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->MessageBox("Erreur sur l'heure", "Corriger l'heure", MB_OK);
    Le fichiert d'aide de C++Builder 2009 donne :
    __fastcall int MessageBox(const const char * Text, const const char * Caption, Longint Flags = MB_OK);

    Or lorsque je veux recompiler le projet j'obtiens une erreur disant pour cette ligne :
    [BCC32 Erreur] ExifU.cpp(501): E2034 Impossible de convertir 'const char *' en 'const wchar_t *'
    [BCC32 Erreur] ExifU.cpp(501): E2342 Mauvaise correspondance de type dans le paramètre 'Text' ('const wchar_t *' désiré, 'const char *' obtenu)

    Si je remplace le MessageBox() par ShowMessage, cela fonctionne.
    Mais j'aimerais comprendre pourquoi il y a ces messges d'erreur et comment écrire maintenant un MessageBox();

    Si quelqu'un a une idée, je suis preneur.
    D'avance merci.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    ceci est du au fait que BCB 2009 est passé à l'unicode, il faut que tu caste tes chaine en WideString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->MessageBox(WideString("Erreur sur l'heure"), WideString("Corriger l'heure"), MB_OK);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut
    Merci,
    j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	Application->MessageBox(WideString("Erreur sur les secondes"),
    		WideString("Corriger les secondes"), MB_OK);
    et j'ai, encore les messages d'erreur :
    [BCC32 Erreur] ExifU.cpp(508): E2034 Impossible de convertir 'WideString' en 'const wchar_t *'
    [BCC32 Erreur] ExifU.cpp(508): E2342 Mauvaise correspondance de type dans le paramètre 'Text' ('const wchar_t *' désiré, 'WideString' obtenu)
    Ces messages semblent ne porter que sur la deuxième ligne.

    Comment créer une chaine qui serait un wchar_t ?
    Merci

  4. #4
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 93
    Billets dans le blog
    1
    Par défaut
    WideString, est une methode pour construie un unicodestring, pour pouvoir utiliser cet UnicodeString, il faut utiliser .c_bstr(), qui le transforme en pointeur de Widechar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application->MessageBox(WideString("Erreur sur les secondes").c_bstr() ,
            WideString("Corriger les secondes").c_bstr(), MB_OK);
    testé sous BCB 2009, sans aucune erreur

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut
    C'est parfait.
    Cela marche très bien.

    Merci encore

  6. #6
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 93
    Billets dans le blog
    1
    Par défaut
    n'oublie pas de mettre résolu

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

Discussions similaires

  1. Que penser de C++Builder 2009 ?
    Par armadio dans le forum C++Builder
    Réponses: 9
    Dernier message: 17/07/2009, 10h55
  2. Exemple UnicodeString Builder 2009
    Par devroot dans le forum C++Builder
    Réponses: 11
    Dernier message: 14/11/2008, 11h21
  3. Problème installation C++ Builder 2009
    Par Clopinet85 dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/10/2008, 16h17

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