почему AfxMessageBox отображает китайские иероглифы - PullRequest
1 голос
/ 18 мая 2011

Этот код отображает привет на китайском

char buffer[10]="hello";
AfxMessageBox((LPCTSTR)buffer);

пока этот код отображает его на английском

AfxMessageBox(L"hello");

Может кто-нибудь сказать мне, как правильно набрать приведение буферной переменной, если это проблема в моем коде

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Тип LPCTSTR - это длинный указатель на прозрачную строку. Здесь важен T, Прозрачный (по крайней мере, я думаю, что T означает Прозрачный).

Если ваше приложение скомпилировано как приложение ASCII, все типы T (например, TCHAR) переопределяются как их ASCII-аналог. Так что TCHAR станет просто чаром.

Если ваше приложение скомпилировано как Unicode, все типы T переопределяются как типы Unicode. TCHAR становится wchar_t.

То же самое верно для всех функций Windows (и MFC). Все функции Windows представлены в двух вариантах: версия ASCII (например, MessageBoxA) и версия Unicode (например, MessageBoxW). Сам MessageBox является не чем иным, как определением для MessageBoxA или MessageBoxW (в зависимости от того, как вы компилируете).

В вашем примере буфер определен как тип char-vector, но вы преобразуете его в указатель на прозрачный тип. Я предполагаю, что ваше приложение скомпилировано в Unicode, поэтому LPCTSTR на самом деле является "wchar_t *". Так что это приведение неверно.

Перед строкой «hello» с L указывается, что компилятор должен передать константу «hello» в виде строки Unicode, что делает ее правильным типом для передачи в версию Unxode AfxMessageBox.

0 голосов
/ 18 мая 2011

Если у вас есть параметры _UNICODE и UNICODE, определенные в опциях вашего компилятора, то приведение строки LPCTSTR будет обрабатывать строку как строку Unicode.В случае окон, он будет обрабатывать каждые 16 байтов как один символ и пытается найти соответствующий символ Юникода.Чтобы он отображал английские символы, используйте TCHAR при определении массива.

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