Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Куда девался WritePrivateProfileInt?..

#cpp #visual_cpp


Для загрузки параметров из ini файла я использую функцию GetPrivateProfileInt, логично,
для сохранения параметров нужно пользоваться WritePrivateProfileInt. Но в VS2012 его
нет! Есть аналоги?    


Ответы

Ответ 1



Есть аналоги? Не знаю насчет VS2012, GetPrivateProfileString - это все же функция WinAPI, а не Visual Studio но аналог можно сделать так: char Buffer[100]; sprintf( Buffer, "%i", MyIntValue ); ::WritePrivateProfileStringA( ..., Buffer, ... ); или так: char Buffer[100]; ::WritePrivateProfileStringA( ..., _itoa( MyIntValue, Buffer, 10 ), ... ); т.е., такую запись Int можно считать впоследствие через GetPrivateProfileInt, ошибок не будет.

Ответ 2



Вообще уроды из Microsoft говорят, что эти функции (для работы с конфигурационными файлами) устарели и программа должна хранить все параметры конфигурации в реестре. Но мы то понимаем, что это плохо и конфигурационные файлы это круто. GetPrivateProfileInt WritePrivateProfileString Note This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry. Поэтому решением может быть как отказ от ф-ций Win32API в пользу специализированных компонентов, так и вызов ф-ции напрямую. По поводу первого - посмотрите, например, класс QSetting из библиотеки Qt. Если будете его использовать, то и под линуксом он будет работать точно так же, как и под виндой. Если второе - если ф-ция все-таки все еще есть в разделяемых библиотеках, то Вас спасет комбинация LoadLibrary/GetProcAddress Еще вариант - сделать собственную функцию. Например, предлагают такой вариант кода BOOL WritePrivateProfileInt (LPCTSTR lpAppName, LPCTSTR lpKeyName, int Value, LPCTSTR lpFileName) { char Buffer[16]; sprintf (Buffer,"%d",Value); return WritePrivateProfileString(lpAppName,lpKeyName,Buffer,lpFileName); } Не забывайте про использование правильных строковых типов!!! В данном примере кода есть небольшая проблема, но ее устранить можно без особых сложностей.

Комментариев нет:

Отправить комментарий