У меня есть код, разработанный для Win32 (XP и более поздних версий), который я портирую на Windows Mobile 6. Он содержит следующую строку:
int count = ::WideCharToMultiByte( CP_ACP, WC_NO_BEST_FIT_CHARS, ..., 0, 0 );
В Windows XP это работает нормально, но в Windows Mobile возвращает 0, а GetLastError () возвращает ошибку 1004 «Недопустимые флаги». WC_NO_BEST_FIT_CHARS
определяется в winnls.h в Windows Mobile 6 SDK.
Этот код будет работать в моих ограниченных тестах, если я либо заменю вызов на ::wcstombs
или заменить WC_NO_BEST_FIT_CHARS
с 0.
Я хотел бы знать, каково будет изменение этих изменений. Будет ли это работать, если я запустлю свою программу на китайской или русской версии Windows Mobile?
Windows Mobile основана на Windows CE и, согласно документации, WideCharToMultiByte не поддерживает флаг WC_NO_BEST_FIT_CHARS в Windows CE.
Согласно этой странице, поддерживаемые флаги:
WC_COMPOSITECHECK Конвертировать составные символы в предварительно составленные символы. WC_DISCARDNS Отбрасывать непространственные символы во время преобразования. WC_SEPCHARS Генерация отдельных символов во время преобразования. (Это поведение конвертации по умолчанию). WC_DEFAULTCHAR Заменить исключения символом по умолчанию во время преобразования.
Других решений пока нет …