Странность GetPrivateProfileString
Вопрос
Я просто возился с вызовом GetPrivateProfileString и GetPrivateProfileSection в kernel32 из .В СЕТИ я наткнулся на что-то странное, чего я не понимаю.
Давайте начнем с этого заклинания:
Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString() As Char, _
ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32
Если я передам lpApplicationName (раздел), без lpKeyName и без lpDefault, я должен получить все ключи для этого раздела, и я действительно это делаю:в 50% случаев.
Если ini-файл имеет lpApplicationName, начинающееся с первой строки, буфер ничего не возвращает.Если lpApplicationName stats находится во второй строке файла, оно возвращает ожидаемые значения.
Сначала я думал, что это вопрос использования версии W и Unicode в объявлении, но их изменение, похоже, не имеет никакого эффекта.
Что я упускаю из виду?
Решение
Проверьте, есть ли в файле, который вы открываете, знак порядка байтов (несколько байт, обозначающих тип кодировки текста).
Эти вызовы Windows API, похоже, не отслеживают метки порядка байтов и из-за этого пропускают первый раздел (следовательно, все работает нормально, если есть пустая строка).
Другие советы
Хорошее решение.Редактирование ini-файла в VS.NET - это, конечно, добавление спецификации utf-8.Гррр.Открытие его в блокноте и сохранение в формате ASCII дает ожидаемые результаты.
Так очевидно.Такой тупой.Еще час в сортире.:-)
Спасибо!-=Крис