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