J'ai essayé de le faire, mais je n'ai trouvé aucune méthode pour cela. Je demande cela en raison du fait que je suis nouveau à Windows. J'ai essayé des STL-Strings, mais Visual Studio 2008 a accumulé des bugs dans la manipulation de STL-WSTRING. Je dirai beaucoup de choses sur cette chose plus tard, dans une autre question. Maintenant, quelqu'un peut-il faire la lumière sur ce problème? P>
6 Réponses :
Cela devrait le faire, en supposant que votre application ne soit pas déjà définie sur Unicode (si elle est, juste jetée directement):
Tant de réponses compliquées (et de mauvaises erronées) et le seul moyen correct de le faire en MFC (par la conversion C'Tors) n'a pas eu de upvotes?
Si vous avez Unicode, _unicode code> drapeaux compilateur définis alors une simple affectation devrait fonctionner. Si vous avez
_mbcs code> défini, vous devez utiliser Méthode MultiByteTowidechar . p>
Trop complexe en MFC. Mieux utiliser cstringw comme suggéré ou une classe CX2Y appropriée.
cstring code> a la conversion C'Tors. Si vous avez besoin d'une chaîne de caractères larges à partir d'une chaîne codée ANSI, faites simplement
CStringw WInString (NarrowString); code>, où
Narrowstring code> est de type
cstringa code> .
Vous pouvez également utiliser la macro T2W () pour éviter d'écrire plusieurs lignes de code multibytetowidechar. p>
Mieux vaut utiliser les classes CX2Y au lieu des anciennes macros T.
Utilisez la classe de conversion CT2CW comme ceci Aussi, gardez à l'esprit que la chaîne passée à la fonction peut être temporaire, alors ne le stockez pas pour une utilisation ultérieure. P> FunckakakingLPCWSTR (CT2CW (cstring_var)) code>. Ceci est garanti de travailler dans des constructions Unicode ou MBCS. P>
Le moyen le plus simple consiste à utiliser les macros de conversion de chaîne MFC, définie à:
https://docs.microsoft.com/en-us/cpp/atl/reference/string-conversion-macros?view=MSVC-160 p>
Par exemple, la macro à convertir Une autre solution consiste à utiliser le pour obtenir une version large de votre chaîne. P> p> cstring code> à
lpcwstr code> est
CT2W (s) code>. p>
CStringa spécialisé code> et
cstringw code> classes. Ce sont les versions ascii et larges correspondantes de
cstring code> en fonction de si vous compilez avec le drapeau
Unicode code>. Vous pouvez donc utiliser: p>
LPCWSTR pstr; CString cstrTemp; ... pstr = cstrTemp.AllocSysString(); AllocSysString will return a BSTR type string, that can be converted to LPCWSTR directly.
Un BSTR code> ne peut pas être converti en un
lpcwstr code>. Les deux types de chaîne ont une sémantique différente. Par exemple,
nullptr code> est toujours un
btr code>.
lpcwstr code> ne fait aucune garantie. En outre, un
BSTR code> doit être nettoyé appelant
sysfreestring code>. Votre code ne montre pas cela, et votre explication ne le remarque pas non plus. Étant donné que l'OP demande un pointeur Const B>, il est probable qu'ils n'ont même pas besoin d'une copie. Dans ce cas, l'opérateur
intégré LPCTSTR () code> peut déjà être suffisant. Et vraiment, sauf si vous avez besoin d'un
BSTR code>, n'en utilisez pas simplement un parce que vous ne savez pas quoi faire d'autre. Désolé, -1.