Bonjour,
Comment convertir un "CString" en "char *":
Bonjour,
Comment convertir un "CString" en "char *":
c'est un multipost, �a... En plus, tu as d�j� la r�ponse...![]()
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.
Comme dit dans son autre post, la classe CString ne poss�de pas de m�thode GetString() (quel que soit le document dont vous tirez cela, il doit �tre erron�)
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.
Tu peux avoir raison si tu utilises Visual C++ 6.0
Mais avec la version .NET la classe CString a �t� refondu en une classe template plus performante et partage les libraires MFC et ATL
Le membre GetString existe effectivement car la classe template CStringT dont CString est un typedef d�rive de la classe template CSimpleStringT
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 template<typename BaseType, class StringTraits> class CStringT : public CSimpleStringT<BaseType>Si GetString() n'est pas un membre de CString mais c'est un membre de sa classe de base CSimpleStringT et donc un appel CString::GetString() est faisable.
Code : S�lectionner tout - Visualiser dans une fen�tre � part typedef ATL::CStringT<TCHAR, StrTraitMFC<TCHAR>> CString;
avec PCXSTR un typedef LPCSTR ou LPCWSTR selon que l'UNICODE est fix� ou pas et tu obtient finalement ton char*.
Code : S�lectionner tout - Visualiser dans une fen�tre � part PCXSTR GetString() const throw();
Et donc avec une version sup�rieure � 6.0 je crois que tu as ton CString en char*
Mais tu peux faire des conversions comme
Voil�
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 CString strText = "Quel case tête la conversion"; char* pszText; pszText = (LPTSTR) (LPCTSTR) strText;![]()
Gabrielly
Ah, c'est du ATL...
Je me demande si c'est toujours une classe de base en MFC normal, �a ne m'�tonnerais pas.
De puls, je n'ai pas consult� la doc de visual 6, mais celle du site de MSDN, o� la classe CString n'a toujours pas de m�thode GetString...
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.
mais convertir un pointeur const en non-const, �a va faire hurler bcp de monde.
un conseil, signale-le explicitement avec l'op�rateur c++ const_cast pour t'�viter de cr�er des bugs quand tu retoucheras � ton code...
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.
Voici les classes partag�es entre MFC et ATL apr�s le 6.0
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfclassessharedbetweenmfcandatl.asp
voici la classe template dont CString est un typedef
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcstringt.asp
PCXSTR GetString( ) const throw( );
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfcsimplestringtgetstring.asp
J'utilise CString indiff�remment d'un projet MFC ou ATL.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 CString str = "Je convertit en const char*"; const char* pcszText = str.GetString(); // j'empreinte GetString() par héritage![]()
Ah, je vois, c'est � partir de .net...
Les headers signal�s dans l'aide ne sont ni dans visual 6, ni dans le SDK de f�vrier 2003... Il serait temps que je me mette � jour (mais ��)
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.
Sinon, j'utilse
CString str;
str.GetBuffer();
et ca marche
++
En effet, GetString n'appartient pas � CString!!! Si on saisie le point, il s'affichera en effet dans la liste mais on aura l'erreur:
alors qu'avec GetBuffer() qui retourne aussi PCXSTR, je n'ai pas cette erreur!error C2664: 'CUtils:rocessError'*: impossible de convertir le param�tre 1 de 'ATL::CSimpleStringT<BaseType,t_bMFCDLL>:
CXSTR' en 'char *'
with
[
BaseType=char,
t_bMFCDLL=true
]
En fait, qu'est-ce que cela fait un GetBuffer sans param�tre, quand est-ce qu'on lui donne un param�tre!
PS: d�sol� si j'ai remont� ce vieux sujet
randriano.dvp.com
D�veloppeur. Product Owner [Agile]. Sites web, mobile apps, syst�me d'information (SI).
Partager