GetPrivateProfileSectionNames

Тема в разделе "WASM.WIN32", создана пользователем Asterix, 24 авг 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Как проверить успешность вызова функции GetPrivateProfileSectionNames,

    что-то из MS'овского описания я ничего не пойму, например, что должна

    вернуть функция если в ini нет ни одной секции.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    Мой перевод: Возвращает количество символов записанных в буфер, адрес которого в первом параметре, не считая завершающий ноль символ, в буфере должно хватать место и для него. Т.е. если секций нет, то ноль. Если указанный размер буфера, третий параметр, не достаточен, то будет возвращено значение на 2 меньше, чем было указано в третьем параметре.
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    Твой перевод ситуацию не прояснил, ибо когда в файле отсутствуют секции функция возвращает 1
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    Покажи код, ini-файл и назови ОС. Ибо под 2ksp4 если секций нет, то возвращает ноль. Единицу удалось получить, только если в ini-файле есть единственная секция вида "[]", т.е. без имени.
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код показывать смысла нет, т.к. для того чтоб проверить достаточно одной строчки

    invoke GetPrivateProfileSectionNames,OFFSET Buff,SIZEOF Buff,OFFSET FileName



    А что до системы, то 1 возвращает под win98, и сейчас только что проверил - в 2k действительно возвращает 0.
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    Код показывать смысла нет

    Есть, чтобы убедиться в наличии
    Код (Text):
    1. invoke WritePrivateProfileString, 0, 0, 0, OFFSET FileName
    перед вызовом GetPrivateProfileSectionNames.



    Попробовал под w98se, получается так: надо проверять первый байт в буфере, если ноль, то либо буфер мал, либо секций нет.
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    > Есть, чтобы убедиться в наличии

    invoke WritePrivateProfileString, 0, 0, 0, OFFSET FileName




    Вряд ли это играет решающую роль.

    Кстати, вроде бы можно обойтись функцией WritePrivateProfileSection для flush'а??



    > Попробовал под w98se, получается так: надо проверять первый байт в буфере, если ноль, то либо буфер мал, либо секций нет.



    Я тоже склонялся к такому решению.

    Вот видишь, а у MS нет никакого указания по поводу правильной проверки успешности.



    Эх, жалко что Билли зажал сырцы Win98, а может загнал уже кому :derisive:))
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    Вряд ли это играет решающую роль.

    Не скажи. Я минут 15 не мог понять, почему после изменения тестового ini-файла функция возвращала одно и тоже старое количество.
     
  9. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    > Не скажи. Я минут 15 не мог понять



    Я нарвался на это раньше(о чем кстати писал в форуме), поэтому к этому моменту уже знал что если поправить файл вручную то нужно делать "flush the cache" :derisive:



    А проверять первый байт буфера для меня очень даже удобно, т.к. буфер выделяется через VirtualAlloc и изначально инициализирован нулями.
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    о чем кстати писал в форуме

    :) От туда и взял.