Как проверить успешность вызова функции GetPrivateProfileSectionNames, что-то из MS'овского описания я ничего не пойму, например, что должна вернуть функция если в ini нет ни одной секции.
Asterix Мой перевод: Возвращает количество символов записанных в буфер, адрес которого в первом параметре, не считая завершающий ноль символ, в буфере должно хватать место и для него. Т.е. если секций нет, то ноль. Если указанный размер буфера, третий параметр, не достаточен, то будет возвращено значение на 2 меньше, чем было указано в третьем параметре.
Asterix Покажи код, ini-файл и назови ОС. Ибо под 2ksp4 если секций нет, то возвращает ноль. Единицу удалось получить, только если в ini-файле есть единственная секция вида "[]", т.е. без имени.
Код показывать смысла нет, т.к. для того чтоб проверить достаточно одной строчки invoke GetPrivateProfileSectionNames,OFFSET Buff,SIZEOF Buff,OFFSET FileName А что до системы, то 1 возвращает под win98, и сейчас только что проверил - в 2k действительно возвращает 0.
Asterix Код показывать смысла нет Есть, чтобы убедиться в наличии Код (Text): invoke WritePrivateProfileString, 0, 0, 0, OFFSET FileName перед вызовом GetPrivateProfileSectionNames. Попробовал под w98se, получается так: надо проверять первый байт в буфере, если ноль, то либо буфер мал, либо секций нет.
q_q > Есть, чтобы убедиться в наличии invoke WritePrivateProfileString, 0, 0, 0, OFFSET FileName Вряд ли это играет решающую роль. Кстати, вроде бы можно обойтись функцией WritePrivateProfileSection для flush'а?? > Попробовал под w98se, получается так: надо проверять первый байт в буфере, если ноль, то либо буфер мал, либо секций нет. Я тоже склонялся к такому решению. Вот видишь, а у MS нет никакого указания по поводу правильной проверки успешности. Эх, жалко что Билли зажал сырцы Win98, а может загнал уже кому ))
Asterix Вряд ли это играет решающую роль. Не скажи. Я минут 15 не мог понять, почему после изменения тестового ini-файла функция возвращала одно и тоже старое количество.
q_q > Не скажи. Я минут 15 не мог понять Я нарвался на это раньше(о чем кстати писал в форуме), поэтому к этому моменту уже знал что если поправить файл вручную то нужно делать "flush the cache" А проверять первый байт буфера для меня очень даже удобно, т.к. буфер выделяется через VirtualAlloc и изначально инициализирован нулями.