Страница 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);
возвращает полный или относительный пидл в фолдер?
че-то я в МСДНе этого не углядель :(