Как Windows идентифицирует не-Unicode приложения?
-
08-07-2019 - |
Вопрос
Я создаю приложение MFC C ++ с " Использовать набор символов Unicode " выбран в Visual Studio. У меня определен UNICODE, мои строки CSt являются 16-битными, я обрабатываю имена файлов с японскими символами в них и т. Д. Но, когда я помещаю строки Unicode, содержащие японские символы, в CComboBox (используя AddString), они отображаются как ????? . р>
Я использую Windows XP Professional x64 (на английском языке). Если я использую региональные и языковые параметры панели управления Windows, вкладку «Дополнительно» и устанавливаю язык для программ, не поддерживающих Юникод, на японский язык, поле со списком выглядит правильно.
Итак, я хочу, чтобы мое поле со списком выглядело правильно, и я хочу понять, почему " Язык для программ, не поддерживающих Юникод, " настройка меняет поведение моей программы Unicode. Что еще я должен сделать, чтобы сообщить Windows, что мое приложение является приложением Unicode?
Спасибо за любую помощь!
Решение
Windows знает разницу между Unicode и не-Unicode программами по функциям, которые они вызывают. Большинство функций Windows API будут иметь два варианта, один из которых оканчивается на A для не-Unicode, а другой на W для Unicode. Включаемые файлы, определяющие эти функции, будут использовать настройки компилятора для автоматического выбора одного или другого для вас.
Символы могут отображаться неправильно, потому что вы выбрали шрифт, в котором их нет, в качестве шрифта пользовательского интерфейса по умолчанию.
Другие советы
Откуда вы получаете строки? Если они жестко запрограммированы в ваших источниках C, то во время вызова AddString они (скорее всего) уже повреждены.
Ничто не препятствует тому, чтобы кто-то брал строку Unicode, " squeeze " например, в std :: string и повредить его. Даже если приложения скомпилированы как Unicode.