как по умолчанию определить все winapi для обработки строк как UNICODE? - PullRequest
1 голос
/ 15 декабря 2011

Используя Visual Studio, есть ли способ определить все функции winapi для обработки всех строк как UNICODE?

Ответы [ 4 ]

2 голосов
/ 15 декабря 2011

Библиотеки MS упорядочены по макросам.

  • Используйте имена методов API без приложения "A" или "W".
  • Оберните определения строк в _T() макрос.

Таким образом, определение «_UNICODE» в препроцессоре приведет к сборке Unicode.

CreateFile(_T("C:\out.txt"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

восстановится в:

// _UNICODE defined
CreateFileW(L"C:\out.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

или

// _UNICODE not defined
CreateFileA("C:\out.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
1 голос
/ 15 декабря 2011

Я думаю, что вы ищете это: Project-> MyProject Properties-> Configuration Properties. Установите Набор символов на Использовать набор символов Unicode . По сути, это делает ваш проект Unicode, и теперь все функции ожидают Unidoe.

Убедитесь, что вы тщательно просмотрели свой источник после такого широкого изменения.

1 голос
/ 15 декабря 2011

Когда вы устанавливаете свой проект для компиляции для Unicode, все функции WinAPI будут принимать строки Unicode (если есть эквиваленты функции Unicode).Однако при указании строкового литерала в C ++ это по умолчанию char *, поэтому для создания строковых литералов Unicode необходимо либо указать их с префиксом L, либо использовать макрос _T( "mystring" ) (Visual Studio)

1 голос
/ 15 декабря 2011

Вы должны использовать префикс L для всех ваших строк Unicode.Строка без префикса, например, "hello", всегда является строкой на основе char.В языке нет ярлыка, который бы рассматривал такую ​​строку как строку широких символов.

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