Win32 в C - Почему мой текст отображается как иностранный язык? - PullRequest
8 голосов
/ 17 июня 2011

Начал смотреть на win32 API на этом сайте: http://www.winprog.org/tutorial/start.html

Я буквально только что скомпилировал первый пример, и он дал мне сообщение с подсказкой на китайском / японском или что-то в этом роде.

Вопрос: почему?

Очевидно, что насколько я понимаю, я должен получить "Прощай, жестокий мир!" в окне сообщения (предположительно под названием «Примечание»).

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}

Foreign...

Спасибо.

Ответы [ 3 ]

9 голосов
/ 17 июня 2011

Попробуйте изменить код следующим образом:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
return 0;
}

Если это работает из-за того, что вам не хватает какого-то заголовка, указывающего на правильный API, вы, похоже, вызываете MessageBoxW (версия Unicode) со строкой ANSI. Если это не просто тест, а вы начинаете писать настоящую программу, подумайте, какой тип символов вы хотите использовать (обычно это флаг прекомпилятора). Затем используйте макрос _T(, чтобы ваши литералы были совместимы с unicode / ansi.

Редактировать из комментария @Benoit: При запуске нового проекта с VS 2008/10 по умолчанию устанавливается набор символов Юникода.

5 голосов
/ 17 июня 2011
MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK);

или

MessageBoxA(NULL, "Goodbye, cruel world!", "Note", MB_OK);
1 голос
/ 10 сентября 2013

Я не могу установить его по умолчанию, поэтому каждый новый проект должен быть установлен.Чтобы найти параметр: Использование Visual Studio 2010 Из главного меню → Проекты → Свойства → Свойства конфигурации → Общие → Сведения о проекте → Набор символов → «Использовать набор многобайтовых символов» (было установлено «Использовать набор символов Юникода»)

После этого все выглядит хорошо.

...