Вопрос

Я просто возился с вызовом 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 дает ожидаемые результаты.

Так очевидно.Такой тупой.Еще час в сортире.:-)

Спасибо!-=Крис

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top