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

Visual C++ Discussion :

Problème d'appel de MessageBox


Sujet :

Visual C++

  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Problème d'appel de MessageBox
    Salut !

    J'effectue un appel dans une application SDI, les informations de paramètres ne demandent plus que 3 paramètres, c'est normal puisque cette API est surchargée sous MFC par ex
    D'habitude lorsque je fais MessageBox("Ceci est un texte","Titre",MB_OK), ça marche par ex, si je le mets comme action d'un bouton mais récemment ça fait l'erreur:

    error C2664: 'CWnd::MessageBoxW' : cannot convert parameter 1 from 'const char [6]' to 'LPCTSTR'

    Pourquoi ça demande brusquement du LPCTSTR mais plus du CString alors que je travaille en interface graphique mfc?

    Rem: je travaille sous Visual Studio 2005 et j'effectue l'appel de cette fonction dans le fichier de vue (CView)

  2. #2
    Lucas Panny
    Invité(e)
    Par défaut Relance de la discussion
    Bonjour !

    Qu'est-ce que ce type LPCTSTR ?
    Comment convertir un CString en LPCTSTR et inversement ?

  3. #3
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Salut !

    Ce problème de conversion de CString est assez fréquent, voici un forum dans les archives de developpez que j'ai trouvé :
    http://www.developpez.net/forums/showthread.php?t=79624
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    il s'agit peut-être simplement d'un problème avec le jeu de caractère (défini probablement avec _UNICODE puisque le message d'erreur fait référence à MessageBoxW).

    Essaye de préfixer toutes tes chaînes constantes avec la macro _T() qui permet de s'affranchir du jeu de caractère courant (qu'il soit ANSI ou UNICODE) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox(_T("Ceci est un texte"), _T("Titre"), MB_OK);

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    Salut !

    C'était ça le prob Neitsa ! Thanks !
    Donc _T() permet de convertir une chaine UNICODE en LPCTSTR ?
    Donc je dois choisir le jeu de caractère ascii mais pas unicode lors de la création de la SDI par l'assistant pour pouvoir faire MessageBox("Hello") directement ?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Lucas Panny Voir le message
    Salut !

    C'était ça le prob Neitsa ! Thanks !
    Donc _T() permet de convertir une chaine UNICODE en LPCTSTR ?
    Donc je dois choisir le jeu de caractère ascii mais pas unicode lors de la création de la SDI par l'assistant pour pouvoir faire MessageBox("Hello") directement ?
    non,_T permet de construire une chaine Unicode si le projet est en unicode.
    si le projet n'est pas unicode il ne fait rien.
    donc T permet d'assurer la compatibilité dans les deux modes.
    de même que TCHAR permet d'assurer la compatibilité dans les deux modes pour les char.

  7. #7
    Lucas Panny
    Invité(e)
    Par défaut
    Citation Envoyé par farscape
    non,_T permet de construire une chaine Unicode si le projet est en unicode.
    si le projet n'est pas unicode il ne fait rien.
    donc T permet d'assurer la compatibilité dans les deux modes.
    OK, c'est clair. Merci !
    Sous VS 2005, faut utiliser toujours ces 2 macros car le projet est par défaut en Unicode.

Discussions similaires

  1. [onenter/submit] Problème d'appel de page
    Par Kylen dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/08/2005, 14h11
  2. Problème d'appel de module.
    Par TomPad dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h24
  3. Autre contexte mais tjs problème d'appel fct interne
    Par Neilos dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/08/2004, 13h51
  4. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

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