Проблемы консольных приложений


8-разрядные консольные функции используют кодовую страницу OEM. Все другие функции используют по умолчанию кодовую страницу ANSI. Это означает что, строки, возвращенные консольными функциями не могут быть обработаны правильно другими функциями и наоборот. Например, если FindFirstFileA возвращает строку, которая содержит некоторые расширенные символы ANSI, WriteConsole A не будет показывать на экране строку должным образом.

Самое лучшее долгосрочное решение проблемы для консольной программы состоит в том, чтобы использовать Уникод. Исключая это решение проблемы, консольная программа должна использовать функцию SetFileApisToOEM. Эта функция изменяет относящиеся к процессу функции файла так, чтобы они произвели OEM строки набора символов, а не строки набора символов ANSI.

Это следующие функции файла:

CopyFile GetFileAttributes LoadLibrary
CreateDirectory GetFullPathName LoadLibraryEx
CreateFile GetModuleFileName MoveFile
CreateProcess GetModuleHandle MoveFileEx
DeleteFile GetSystemDirectory OpenFile
FindFirstFile GetTempFileName RemoveDirectory
FindNextFile GetTempPath SearchPath
GetCurrentDirectory GetVolumeInformation SetCurrentDirectory
GetDiskFreeSpace GetWindowsDirectory SetFileAttributes
GetDriveType _lopen  

Когда занимаешься с командными строками, консольная программа должна получить командную строку в форме Unicode и конвертировать ее в форму OEM, используя необходимые символьные функции для OEM

Обратите внимание!, также, что argv использует набор символов ANSI.

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz