Конфигурация локали и ее связь с Windows API
Может ли конфигурация локали системы ИЛИ конфигурация типа клавиатуры этой системы в любом случае повлиять на то, какой API вызывается на уровне ядра? В частности, если программа вызывает API "CreateFile ()", то в документации Windows API говорится, что вызов делегируется либо CreateFileA, либо CreateFileW. Если эта программа запускается в китайской системе с китайской клавиатурой, то какая из двух функций будет вызвана?
1 ответ
Unicode и Locale - это две совершенно ортогональные концепции.
Что касается CreateFileA
против CreateFileW
- параметр, который управляет этим параметром, является параметром времени компиляции: если приложение скомпилировано для работы с набором символов Unicode, тогда CreateFileW
будет вызван, если в настройках компиляции указано, что приложение должно быть скомпилировано как многобайтовое приложение, то CreateFileA
будет называться.
Если вы используете Visual Studio C++, проверьте параметры проекта приложения. В разделе "Свойства конфигурации" на странице "Общие" будет параметр "Набор символов" - для него можно установить "Использовать набор символов Юникода" или "Использовать многобайтовый набор символов". Эффект этого параметра заключается в автоматическом добавлении еще одного листа свойств к решению, который отображается под Диспетчером свойств: на листе свойств "Поддержка Unicode" добавляются определения препроцессора "._UNICODE,UNICODE
"- на странице свойств" Поддержка многобайтовых символов "вместо этого добавляется"_MBCS".
Теперь, если вы посмотрите на определение для CreateFile
вы увидите, что это сам макрос, и когда вы создаете приложение, все CreateFile
звонки в коде разрешат CreateFileW
звонки, если UNICODE
определяется, и CreateFileA
звонит иначе.
UNICODE
используется windows.h
переключаться между версиями Windows API и Wide и Ansi.
_MBCS
а также _UNICODE
используются заголовками времени выполнения Microsoft C - главным образом, tchar.h - для переключения библиотеки c с поддержки однобайтовых многобайтовых символов на символы Юникода в функциях, которые поддерживают это.