Как Windows идентифицирует не-Unicode приложения?

Я создаю приложение MFC C++ с "Использовать набор символов Unicode", выбранный в Visual Studio. У меня определен UNICODE, мои строки CSt являются 16-битными, я обрабатываю имена файлов с японскими символами в них и т. Д. Но, когда я помещаю строки Unicode, содержащие японские символы, в CComboBox (используя AddString), они отображаются как?????,

Я использую Windows XP Professional x64 (на английском языке). Если я использую региональные и языковые параметры панели управления Windows, вкладку "Дополнительно" и задаю язык для программ, не поддерживающих Юникод, на японском языке, поле со списком выглядит правильно.

Итак, я хочу, чтобы мое поле со списком выглядело правильно, и я хочу понять, почему настройка "Язык для не-Unicode-программ" меняет поведение моей Unicode-программы. Что-то еще, что я должен сделать, чтобы сказать Windows, мое приложение - приложение Unicode?

Спасибо за любую помощь!

2 ответа

Решение

Windows знает разницу между Unicode и не-Unicode программами по функциям, которые они вызывают. Большинство функций Windows API будут иметь два варианта, один из которых оканчивается на A для не-Unicode, а другой - на W для Unicode. Включаемые файлы, которые определяют эти функции, будут использовать настройки компилятора для автоматического выбора того или другого для вас.

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

Откуда вы получаете строки? Если они жестко запрограммированы в ваших источниках Си, то во время вызова AddString они (скорее всего) уже повреждены.

Ничто не препятствует тому, чтобы кто-то взял некоторую строку Unicode, "сжал" ее, например, в std::string, и повредил ее. Даже если приложения скомпилированы как Unicode.

Другие вопросы по тегам