vc ++ - Как конвертировать CString в LPCWSTR - PullRequest
5 голосов
/ 11 марта 2011

Я пытался сделать это, но я не нашел никакого способа для этого. Я спрашиваю об этом из-за того, что я новичок в Windows. Я пробовал stl-strings, но Visual Studio 2008 - накапливает ошибки в обработке stl-wstring. Я много расскажу об этом позже, в другом вопросе. Кто-нибудь может пролить свет на этот вопрос?

Ответы [ 6 ]

6 голосов
/ 11 марта 2011

Используйте класс преобразования CT2CW следующим образом FuncTakingLPCWSTR(CT2CW(cstring_var)).Это гарантированно работает в сборках Unicode или MBCS.

Кроме того, имейте в виду, что строка, переданная функции, может быть временной, поэтому не храните ее для дальнейшего использования.

4 голосов
/ 11 марта 2011

Самый простой способ - использовать макросы преобразования строк MFC, определенные в:

http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx

Например, макрос для преобразования CString в LPCWSTR равен CT2W(s).

Другой способ - использовать специализированные классы CStringA и CStringW. Это соответствующие ascii и широкие версии CString в зависимости от того, компилируете ли вы с флагом UNICODE. Таким образом, вы можете использовать:

CString your_string = "blah"
CStringW wide_string = your_string;

чтобы получить широкую версию вашей строки.

4 голосов
/ 11 марта 2011

Это должно сделать это, предполагая, что ваше приложение еще не настроено на Unicode (если это так, просто приведение непосредственно):

CString str("Hello, world!");
CStringW strw(str);
LPCWSTR ptr = strw;
1 голос
/ 15 мая 2013
LPCWSTR pstr;
CString cstrTemp;

...

pstr = cstrTemp.AllocSysString();

AllocSysString вернет строку типа BSTR, которую можно напрямую преобразовать в LPCWSTR.

1 голос
/ 11 марта 2011

Если у вас определены UNICODE,_UNICODE флаги компилятора, тогда должно работать простое назначение.Если вы определили _MBCS, вам нужно использовать метод MultiByteToWideChar .

0 голосов
/ 11 марта 2011

Вы также можете использовать макрос T2W (), чтобы избежать написания нескольких строк кода MultiByteToWideChar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...