[MFC] CString en argument d'une méthode > LPCTSTR

CString en argument d'une méthode > LPCTSTR [MFC] - C++ - Programmation

Marsh Posté le 16-06-2003 à 11:32:37    

Salut, pourquoi ce code compile mais quand l'éxécute plante?
J'ai lu dans la doc qu'il vaut mieux MaMethode(LPTCTSTR c) que MaMethode(CString c) donc c'est ce que je fait...
 
CString s;

Code :
  1. void CMaClasse::MaMethode(LPCTSTR c)
  2. {
  3. if(c == s)
  4. ...
  5. }


 
comment faire pour passer en argument une CString donc? LPCTSTR?
merci
   ANT

Reply

Marsh Posté le 16-06-2003 à 11:32:37   

Reply

Marsh Posté le 16-06-2003 à 11:37:12    

J'te conseillerai :

Code :
  1. void CMaClasse::MaMethode(const CString& _krMaChaine)
  2.   {
  3.      if (_krMaChaine == s)
  4.      
  5.     ...
  6.   }


 
& pour indiquer un passage par référence
const pour reproduire la "non modification" du contenu de la chaine (constance assurée également quand on fait un passage par un pointeur de type LPCTSTR)


Message édité par El_gringo le 16-06-2003 à 11:38:44
Reply

Marsh Posté le 16-06-2003 à 11:38:34    

CString :: operator LPCTSTR ( ) const;


 

Code :
  1. obj.MaMethode((LPCTSTR) maCString);


Message édité par VisualC++ le 16-06-2003 à 11:38:54
Reply

Marsh Posté le 16-06-2003 à 11:39:42    

Oui en plus je viens de voir que l'erreur venait d'ailleurs  :whistle:  
Mais alors à quoi servent LPCSTR et cie par rapport a CString classique? Question de format (unicode,...) ?

Reply

Marsh Posté le 16-06-2003 à 11:40:43    

LPCSTSTR ca fait un char* a la fin (omission faite des const on va dire), CString c un objet complet.

Reply

Marsh Posté le 16-06-2003 à 11:57:00    

VisualC++ a écrit :

LPCSTSTR ca fait un char* a la fin (omission faite des const on va dire), CString c un objet complet.


 
Mais je n'vois pas l'intéret de bosser sur un LPCTSTR, sachant qu'on peut profiter de toutes les méthodes d'une CString, et ce, sans la copier bien sur (juste en copiant se référence).

Reply

Marsh Posté le 16-06-2003 à 11:58:26    

:jap:  
 
Une autre question:
Visual me crée automatiquement une classe CAboutDlg correspondant à la boîte de dialogue A Propos.
J'aimerais dans le MonAppDlg.h ajouter à la classe CMonAppDlg ça:
CAboutDlg *about;
 
mais ça ne compile pas parce que le .h ne sait pas ce qu'est CAboutDlg qui est définie dans MonAppDlg.cpp. Comment faire pour déclarer mon pointeur dans ma classe?

Reply

Marsh Posté le 16-06-2003 à 11:59:48    

El_gringo a écrit :


 
Mais je n'vois pas l'intéret de bosser sur un LPCTSTR, sachant qu'on peut profiter de toutes les méthodes d'une CString, et ce, sans la copier bien sur (juste en copiant se référence).


 
mais j ai pas dit que j ete pour le lpctstr, effectivement si il fait du MFC un CString& c bien plus pratique

Reply

Marsh Posté le 16-06-2003 à 12:00:49    

ANTSite a écrit :

:jap:  
 
Une autre question:
Visual me crée automatiquement une classe CAboutDlg correspondant à la boîte de dialogue A Propos.
J'aimerais dans le MonAppDlg.h ajouter à la classe CMonAppDlg ça:
CAboutDlg *about;
 
mais ça ne compile pas parce que le .h ne sait pas ce qu'est CAboutDlg qui est définie dans MonAppDlg.cpp. Comment faire pour déclarer mon pointeur dans ma classe?
 


 
fait un

Code :
  1. class CAboutDlg;
  2. class CmonAppDlg {
  3. .....
  4. };


 
il devrait se debrouiller a la compile

Reply

Marsh Posté le 16-06-2003 à 12:02:22    

ANTSite a écrit :

:jap:  
 
Une autre question:
Visual me crée automatiquement une classe CAboutDlg correspondant à la boîte de dialogue A Propos.
J'aimerais dans le MonAppDlg.h ajouter à la classe CMonAppDlg ça:
CAboutDlg *about;
 
mais ça ne compile pas parce que le .h ne sait pas ce qu'est CAboutDlg qui est définie dans MonAppDlg.cpp. Comment faire pour déclarer mon pointeur dans ma classe?
 


 
Dans le .h, avant la déclaration de ta classe CMonAppDlg, essaye de mettre  
public class CAboutDlg;

Reply

Marsh Posté le 16-06-2003 à 12:02:22   

Reply

Marsh Posté le 16-06-2003 à 13:07:15    

nickel! merci à tous les 2!
 
PS: je suis le boolay de personne, si ça vous intéresse, je pense que ça serait justifié ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed