Как Windows идентифицирует не-Unicode приложения? - PullRequest
5 голосов
/ 29 октября 2009

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 29 октября 2009

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

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

0 голосов
/ 11 ноября 2009

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

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

...