Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2012-08-29 08:01:06 ЛС | профиль | цитата
nesco писал(а):
Что-то я не совсем понял -- а где происходит восстановление указателя, или тут некоторый другой механизм?

из разумно приведенного тобой фрагмента:
Первая строка - сохранение указателя на структуру в поле объекта, чтобы народ мог пользоваться результатами (через точки Count и ShortName)
Сама структура - локальная переменная (т.е. лежит в стеке и размером эдак так байт 300)
Рекурсивный вызов метода Search (3-я строка снизу) изменит этот указатель на новую структуру из стека.
Закончили рекурсию (т.е. обработку папки), надо восстанавливать. Ну вот же вторая строка снизу -- она не просто тупо пишет то же самое, а именно восстанавливает. Потому что указатель был изменен рекурсивным вызовом (и, кстати говоря, уже не действительный)

Собственно, все мои опасения и заключались в том, что рекурсивный вызов изменил структуру TWin32FindData, а мы продолжаем им пользоваться далее (скажем в FindNextFile) как будто ничего не произошло.
Руку на отсечение не дам, что Билл не предусмотрел такие заморочки в своих FindXXXX-ах ... Но если и предусмотрел, то никому ничего не сказал. Типа -- я в MSDN про это ничего не нашел.

карма: 9

0