Я хочу преобразовать CString в WCHAR* или std::string в WCHAR* в приложении Visual Studio C++ MFC. Я обнаружил в stackoverflow, что у него есть решение только для преобразования в wchar_t*.

Пожалуйста, помогите мне. Спасибо!

-2
Noob 19 Янв 2022 в 07:30
5
WCHAR используется в Windows как псевдоним для wchar_t. Вам может быть интересно изучить эти общие типы для Windows< /a> ссылка.
 – 
Some programmer dude
19 Янв 2022 в 07:33
2
CString — это typedef, который либо псевдоним CStringA, либо CStringW. Ответ на этот вопрос будет разным для каждого случая.
 – 
IInspectable
19 Янв 2022 в 09:59
Есть ли у вас обновления? Если ваше дело было раскрыто, помогите отметить ответы. Если нет, просто свяжитесь с нами. Будем признательны за понимание и сотрудничество.
 – 
Yujian Yao - MSFT
25 Янв 2022 в 11:14

2 ответа

Когда вы используете CString, вы можете получить доступ к макросу CW2A ATL, который преобразует CString в строку.

CString theCStr;
std::string STDStr( CW2A( theCStr.GetString(), CP_UTF8 ) );

Или обратитесь к этому документу.

0
Yujian Yao - MSFT 19 Янв 2022 в 08:59
Вопрос в том, как преобразовать в WCHAR*. CW2A этого не сделает. И это тоже неправильный макрос. Если вы используете CString (в отличие от CStringW), совместимый макрос преобразования называется CT2A.
 – 
IInspectable
19 Янв 2022 в 13:20
Это проблема объясняет, как преобразовать cstring в wchar*.
 – 
Yujian Yao - MSFT
20 Янв 2022 в 08:26
Эта запись страдает точно таким же несоответствием, как и этот предлагаемый ответ. Если вы используете внешний набор символов, вы должны использовать его последовательно. Эти вопросы и ответы гораздо полезнее. И это тоже на месте.
 – 
IInspectable
20 Янв 2022 в 11:42

Я считаю, что класс CString может сделать такое преобразование:

CStringA a = "ANSI";
CStringW w(a);
0
Vlad Feinstein 20 Янв 2022 в 03:34
Я считаю, что это не решает вопрос. Насколько я читал, OP необходимо преобразовать CString в WCHAR*, но он нашел только решения, которые преобразуются в wchar_t*. Очевидно, они не понимают, что WCHAR* и wchar_t* — это одно и то же в Windows.
 – 
IInspectable
20 Янв 2022 в 11:44
Возможно; Я просто пытался показать способ без использования подверженных ошибкам макросов.
 – 
Vlad Feinstein
20 Янв 2022 в 20:34
1
Конечно, за исключением того, что здесь тоже есть подводные камни. «ANSI» — это только половина кодировки символов. Другая половина отсутствует (и подразумевается, и, возможно, неверна).
 – 
IInspectable
20 Янв 2022 в 21:04