Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

24.3.1.Ansi-версия программы для среды mvs 6.0.

В качестве примера использования файла инициализации приведем такую программу (среда MVS 6.0, использование кодировки ANSI):

В результате выполнения такой программы будет создан ini-файл с таким содержимым:

[ELEPHANT]

LegsNumber=3

FName=Инвалид

Здесь ELEPHANT – имя секции, LegsNumber и FName – имена ключей, а 3 и Инвалид – значения указанных ключей соответственно.

В ini-файле может быть произвольное число секций и в каждой секции – произвольное число ключей.

24.3.2.Unicode-версия программы для ис mvs-2005 и mvs-2008.

Приведенная выше программа будет (по крайней мере должна, если она с этим согласна) функционировать корректно, если ее компилировать в среде MVS 6.0. В среде MVS-2005 она работать не будет, так как по умолчанию в ИС MVS-2005 установлена кодировка Unicode (см. раздел «Интегрированная среда MVS-2005» в этом документе). Та же программа для ИС MVS-2005 (с установленной по умолчанию кодировкой Unicode) может быть реализована так, как в приведенном ниже листинге.

Некоторые комментарии к этой версии программы, использующей кодировку Unicode (установлена в свойствах проекта ИС MVS-2005 по умолчанию).

Тип wchar_t трактуется как символы Unicode (2-байтные).

Метод CString::GetBuffer() возвращает указатель на строку, хранящуюся в классе CString.

Функция WideCharToMultiByte() с множеством параметров предназначена для преобразования символов из кодировки Unicode в кодировку ANSI (кодовая страница 866 – OEM-Russia).

Более подробные сведения об обработке строк символов см. в подразделе «Обработка строк» этого руководства.

В целом приведенные в этой программе приемы, т.е. использование функций CharToOemA(), WideCharToMultiByte() и, частично, класса CString, должны были проиллюстрировать Вам (надеюсь, что так оно и случилось) сложности и способы работы с символами кириллицы в среде MVS-2005 при разработке консольных приложений. В приложениях с графическим интерфейсом (GUI application), к счастью, с символами кириллицы дело обстоит легче (несомненно, что Вы обратили внимание на передачу текста на русском языке в функцию вывода окна сообщения AfxMessageBox()).

Замечание. Русифицировать (консольное) приложение можно и путем вызова функции setlocale(LC_ALL,"rus");, которая, упрощенно говоря, устанавливает русский язык в качестве языка ввода/вывода. Эту функцию достаточно вызвать один раз при запуске программы на выполнение – проще всего в начале функции _tmain().

Еще раз хочу подчеркнуть, что в приведенном виде программа будет компилироваться и выполняться, если в свойствах проекта (Project→Properties→General) для параметра Character Set выбрано значение по умолчанию “Use Unicode Character Set”.

Ниже приведен код, который позволяет задать имя файла инициализации (для консольного приложения) другим способом, отличным от приведенного выше. В нем использован тот факт, что в функцию _tmain() параметром TCHAR* argv[] передается системой полное имя исполняемого файла. Таким образом, вызов функции SetIniFileName2() в функции _tmain() может выглядеть так:

if(!SetIniFileName2(argv[0])) AfxMessageBox("Ошибка при изменении имени ini-файла");

/* SetIniFileName2() задает новое имя ini-файла, точнее, новый путь,

используя тот факт, что в качестве параметра в функцию _tmain Windows

передает полное имя приложения, например, "C:\Temp\IninFile\Debug\IniFile.exe".

Если этого не сделать, то ini-файл будет записываться в каталог Windows,

что, как на мой взгляд, не есть хорошо

*/

bool SetIniFileName2(TCHAR* ExeFullName)

{

CString Work=ExeFullName; // делаем копию параметра

Work.Delete(Work.GetLength()-3,3); /* удаляем из полного имени файла

три последних символа - ехе*/

Work+="ini"; /* добавляем к имени файла три последних символа,

получая таким образом имя файла инициализации*/

free((void *)theApp.m_pszProfileName); /* освобождение памяти, выделенной

для старого имени ini-файла системой*/

theApp.m_pszProfileName=_tcsdup(Work); /* назначаем новое имя ini-файла */

return true;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]