Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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; }

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 453.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...