Аннотация:
При разработке одной из программ я столкнулся с совершенно типовой проблемой: было необходимо использовать ini-файл для хранения конфигурационных данных программы. Задача стандартная, но в моем случае данные были совершенно разных типов (целые числа, числа с плавающей точкой, строки, цвет в кодировке RGB). Каждый из параметров должен был удовлетворять определенным ограниченям. Подходящих решений под рукой не оказалось, в связи с чем на свет появился этот компонент.
Здравствуйте, Попов Юрий Юрьевич, Вы писали:
ПЮЮ>Статья:
ПЮЮ>Авторы: ПЮЮ> Попов Юрий Юрьевич
ПЮЮ>Аннотация: ПЮЮ>При разработке одной из программ я столкнулся с совершенно типовой проблемой: было необходимо использовать ini-файл для хранения конфигурационных данных программы. Задача стандартная, но в моем случае данные были совершенно разных типов (целые числа, числа с плавающей точкой, строки, цвет в кодировке RGB). Каждый из параметров должен был удовлетворять определенным ограниченям. Подходящих решений под рукой не оказалось, в связи с чем на свет появился этот компонент.
А это не устраивает:
GetPrivateProfileInt
GetPrivateProfileSection
GetPrivateProfileSectionNames
GetPrivateProfileString
GetPrivateProfileStruct
GetProfileInt
GetProfileSection
GetProfileString
WritePrivateProfileSection
WritePrivateProfileString
WritePrivateProfileStruct
WriteProfileSection
WriteProfileString
Здравствуйте, Попов Юрий Юрьевич, Вы писали:
ПЮЮ>При разработке одной из программ я столкнулся с совершенно типовой проблемой: было необходимо использовать ini-файл для хранения конфигурационных данных программы.
По-моему, если программа разрабатывалась под Windows, легче было записать конфигурацию в XML, используя msxml.
Здравствуйте, kolam, Вы писали:
K>Здравствуйте, Попов Юрий Юрьевич, Вы писали:
ПЮЮ>>При разработке одной из программ я столкнулся с совершенно типовой проблемой: было необходимо использовать ini-файл для хранения конфигурационных данных программы. K>По-моему, если программа разрабатывалась под Windows, легче было записать конфигурацию в XML, используя msxml.
Возможно я ошибаюсь, но msxml под 95 винды не ставится. По крайней мере последний.
Здравствуйте, Рома Мик, Вы писали:
РМ>Возможно я ошибаюсь, но msxml под 95 винды не ставится. По крайней мере последний.
msxml.dll входит в состав Internet Explorer 5.0 for Win95. И даже в состав IE 4.0 for Win95, но на этот счет я не уверен.
Здравствуйте, hard.disk, Вы писали:
HD>А это не устраивает: HD>GetPrivateProfileInt HD>GetPrivateProfileSection HD>GetPrivateProfileSectionNames HD>GetPrivateProfileString HD>GetPrivateProfileStruct HD>GetProfileInt HD>GetProfileSection HD>GetProfileString HD>WritePrivateProfileSection HD>WritePrivateProfileString HD>WritePrivateProfileStruct HD>WriteProfileSection HD>WriteProfileString
HD>Правда только под Windows
Нет, не устраивает, хотелось иметь более удобный и гибкий инструмент.
Здравствуйте, kolam, Вы писали:
K>Здравствуйте, Рома Мик, Вы писали:
РМ>>Возможно я ошибаюсь, но msxml под 95 винды не ставится. По крайней мере последний. K>msxml.dll входит в состав Internet Explorer 5.0 for Win95. И даже в состав IE 4.0 for Win95, но на этот счет я не уверен.
По собственному опыту скажу: еще много где сохранились win95, на многих из них не стоят никакие апдейты, включая свежий эксплорер. У меня лично копирование msxml.dll в голую винду не привело к тому, что програма с использованием msxml заработала. Всякие regsvr32 тоже не помогли. Хотя я не очень и пытался. Просто решил, что msxml в программах, рассчитанных на максимальную переносимость лучше не использовать.
Здравствуйте, Yuri, Вы писали:
Y>Здравствуйте, hard.disk, Вы писали:
HD>>А это не устраивает: HD>>GetPrivateProfileInt HD>>GetPrivateProfileSection HD>>GetPrivateProfileSectionNames HD>>GetPrivateProfileString HD>>GetPrivateProfileStruct HD>>GetProfileInt HD>>GetProfileSection HD>>GetProfileString HD>>WritePrivateProfileSection HD>>WritePrivateProfileString HD>>WritePrivateProfileStruct HD>>WriteProfileSection HD>>WriteProfileString
HD>>Правда только под Windows
Y>Нет, не устраивает, хотелось иметь более удобный и гибкий инструмент.
Тогда можно было использовать эти функции в реализации, а не изобретать, IMHO, свой парсер,
т.е. сделать обёртку.
Здравствуйте, hard.disk, Вы писали:
HD>Тогда можно было использовать эти функции в реализации, а не изобретать, IMHO, свой парсер, HD>т.е. сделать обёртку.
Гы... только у этих функций на 9x есть принципиальное ограничение — размер файла МЕНЬШЕ 64 Кб... а на NT — нету... по крайней мере, эксперимент показал, что все именно так...
... << RSDN@Home 1.1 beta 2 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, hard.disk, Вы писали:
HD>>Тогда можно было использовать эти функции в реализации, а не изобретать, IMHO, свой парсер, HD>>т.е. сделать обёртку. H_D>Гы... только у этих функций на 9x есть принципиальное ограничение — размер файла МЕНЬШЕ 64 Кб... а на NT — нету... по крайней мере, эксперимент показал, что все именно так...
Мне кажется уже не стоит орентироватся на линейку Windows 9x.
Да и всегда есть выход:
1) Разбить файл на логические секции:
settings1.ini — настройки интерфейса
settings2.ini — настройки связанные с обработкой данных
2) Вынести большие значения в отдельный файл:
[SomeSection]
SomeBigValueKey=SomeBigValueOfKey.bin
Я думаю это лучше, чем тащить код который есть в системе.
Здравствуйте, hard.disk, Вы писали:
HD>Мне кажется уже не стоит орентироватся на линейку Windows 9x.
Гм. Попробуйте написать какой-нибудь софт для Сбербанка.
HD>Да и всегда есть выход: HD>1) Разбить файл на логические секции: HD>settings1.ini — настройки интерфейса HD>settings2.ini — настройки связанные с обработкой данных
Ух, крысота.
HD>2) Вынести большие значения в отдельный файл: HD>[SomeSection] HD>SomeBigValueKey=SomeBigValueOfKey.bin
Можно и так, но удобнее все настройки все-таки в месте.
HD>Я думаю это лучше, чем тащить код который есть в системе.
Да сколько там его, кода-то?
Вопрос по дизайну. Некоторые решения мне показались сомнительными, однако, полагаю, они вызваны определенными причинами. Мне интересно почему ты именно так спроектировал свою библиотеку.
1. Насколько я понял исключения бросаются как указатели. т.е. для того, чтобы словить его, я должен написать так:
Вместе с тем, класс CException наследуется от std::exception. На мой взгляд, здесь присутствует непоследовательность, поскольку исключения стандартной библиотеки бросаются по значению. Лично я, либо не наследовал бы CException от std::exception, либо бросал исключения по значению. Кстати, во втором случае не нужно было бы делать явное удаление исключения и можно было бы словить данное исключение таким catch-блоком, которое ловит также и исключения стандартной библиотеки:
2. Класс исключения один. Однако IniParser возбуждает исключения различных видов, и эти виды исключений различаются кодами ошибок, которые можно получить вызовом CException::GetCode(). Мне кажется, что лучше было бы сделать несколько классов исключений (например, CFileSystemException, CValueOutOfRangesException), имеющих общего предка (тот же CException). В этом случае появилась бы возможность ловить специфические виды исключений и по своему их обрабатывать.
И, кстати, не нужно было бы в исключении вида FileSystemError использовать поле CException::m_nLineNum для передачи кода ошибки.
Здравствуйте, HeaveN, Вы писали:
HN>Здравствуйте, hard.disk, Вы писали:
HD>>Мне кажется уже не стоит орентироватся на линейку Windows 9x.
HN>Пока эта ось стоит у на большем количестве десктопов, на нее надо ориентироваться.
На 5% у online пользователей Win98. Win95 ~1%. Это очень мало.
ОГ>На 5% у online пользователей Win98. Win95 ~1%. Это очень мало.
А реально глянуть где-нить статистику? К примеру, по какому-нить сайту, где не только программисты, а есть простые обыватели?
Здравствуйте, Plague, Вы писали:
ОГ>>На 5% у online пользователей Win98. Win95 ~1%. Это очень мало. P>А реально глянуть где-нить статистику? К примеру, по какому-нить сайту, где не только программисты, а есть простые обыватели?
Здравствуйте, Олег Гашев, Вы писали:
HD>>>Мне кажется уже не стоит орентироватся на линейку Windows 9x.
HN>>Пока эта ось стоит у на большем количестве десктопов, на нее надо ориентироваться.
ОГ>На 5% у online пользователей Win98. Win95 ~1%. Это очень мало.