Bonjour,
Comment convertir un "CString" en "char *" :?:
Version imprimable
Bonjour,
Comment convertir un "CString" en "char *" :?:
c'est un multipost, �a... En plus, tu as d�j� la r�ponse... :roll:
CString::GetString()
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�)
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:
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: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: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� :DCode:
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...
merci pour ta reponce detailler :wink:
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...
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. :wink:Code:
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 ��)
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!Citation:
error C2664: 'CUtils::ProcessError'*: impossible de convertir le param�tre 1 de 'ATL::CSimpleStringT<BaseType,t_bMFCDLL>::PCXSTR' 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