Страница 2 из 3
Добавлено: 17 май 2005, 18:13
Romeo
Да, кстати, нашёл ошибку у тебя в коде. Плохо копировал из MDSN
Завершающий ноль тоже нужно копировать:
...
pidlNew = (LPITEMIDLIST)g_pMalloc->Alloc(cb1 + cb2
+ sizeof(SHORT));
...
CopyMemory(((LPSTR)pidlNew) + cb1, pidlFolder, cb2
+ sizeof(SHORT));
Добавлено: 17 май 2005, 18:38
Kolinus
Изначально идет путь фолдера, а потом ребенок.
Так ?
Все равно что-то не пашет.
А через винду каким-то образом можно скопировать
.
Добавлено: 18 май 2005, 01:57
Eugie
Romeo, нет GetSize() из примера MSDN учитывает концевые нули.
Kolinus, поменяй порядок:
Код: Выделить всё
CopyMemory(pidlNew, pidlFolder, cb1);
CopyMemory(((LPSTR)pidlNew) + cb1, pidlChild, cb2);
Добавлено: 18 май 2005, 11:16
Romeo
Точно, просмотрел, времени было мало. Действительно в неправильном порядке копируется. Если будет возвращаться неправильный результат и после этого фикса, то напиши код ошибки. Это многое прояснит.
Добавлено: 18 май 2005, 15:46
Kolinus
Поменял и так и этак.
Делал и с нулями и без.
Возвращает всегда ложь.
GetLastError() ничего не дает
.
Что еще посоветуете ?
Добавлено: 18 май 2005, 16:49
Eugie
SHGetPathFromIDList очень простая функция, чтобы ошибка лежала слишком глубоко. ИМХО, всего 2 варианта: 1) буфер мал; 2) путь не существует. А уж что там на самом деле - тебе виднее
Добавлено: 18 май 2005, 17:27
Kolinus
Размер буфера 2560 - вряд ли мало.
а насчет не существует - через виндовый эксплорер я их могу скопировать.
Или может такое быть что через эксплорер копируются, а программно - нет??
Добавлено: 18 май 2005, 17:38
Romeo
Есть ещё вариант: такого файла на диске не существует - он виртуальный.
Добавлено: 18 май 2005, 17:39
Kolinus
Возможно.
Но ведь виндой-то я его могу вытянуть. Вот что меня ставит в тупик.
Добавлено: 19 май 2005, 12:48
Kolinus
Такой вопрос: а код
hr=folder->QueryInterface(IID_IPersistFolder2,(void**)&pf);
LPITEMIDLIST pidlFolder;
hr=pf->GetCurFolder(&pidlFolder);
возвращает полный или относительный пидл в фолдер?
че-то я в МСДНе этого не углядель