Не понимаю. Какая разница между следующими двумя примерами? Первый работает(получает строку), второй - нет. 1) Код (Text): invoke GetPrivateProfileString,addr sec,addr key,0,addr str,[b]sizeof str[/b],addr path 2) Код (Text): invoke lstrlen,addr str mov len,eax invoke GetPrivateProfileString,addr sec,addr key,0,addr str,[b]len[/b],addr path
sizeof - макрос, возвращающий размер переменной в байтах. Для строки str db XXX dup это будет XXX байт. Размер вычисляется на этапе компиляции и в точку вызова подставляется число lstrlen - рантайм-функция, подсчитывающая число символов в строке до первого нулевого байта. В данном случае вариант с sizeof более правильный, т.к. в функцию нужно передавать макимальный размер буфера под строку, а не ее текущую длину, которая видимо равна 0, т.к. str инициализирована нулями