Да, кстати, нашёл ошибку у тебя в коде. Плохо копировал из MDSN Завершающий ноль тоже нужно копировать:
...
pidlNew = (LPITEMIDLIST)g_pMalloc->Alloc(cb1 + cb2 + sizeof(SHORT));
...
CopyMemory(((LPSTR)pidlNew) + cb1, pidlFolder, cb2 + sizeof(SHORT));
Работа с виртуальными папками и файлами
Модераторы: Duncon, Hawk, Romeo, Eugie
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Изначально идет путь фолдера, а потом ребенок.
Так ?
Все равно что-то не пашет.
А через винду каким-то образом можно скопировать .
Так ?
Все равно что-то не пашет.
А через винду каким-то образом можно скопировать .
В SAD - все в SAD.
Romeo, нет GetSize() из примера MSDN учитывает концевые нули.
Kolinus, поменяй порядок:
Kolinus, поменяй порядок:
Код: Выделить всё
CopyMemory(pidlNew, pidlFolder, cb1);
CopyMemory(((LPSTR)pidlNew) + cb1, pidlChild, cb2);
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Точно, просмотрел, времени было мало. Действительно в неправильном порядке копируется. Если будет возвращаться неправильный результат и после этого фикса, то напиши код ошибки. Это многое прояснит.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Поменял и так и этак.
Делал и с нулями и без.
Возвращает всегда ложь.
GetLastError() ничего не дает .
Что еще посоветуете ?
Делал и с нулями и без.
Возвращает всегда ложь.
GetLastError() ничего не дает .
Что еще посоветуете ?
В SAD - все в SAD.
SHGetPathFromIDList очень простая функция, чтобы ошибка лежала слишком глубоко. ИМХО, всего 2 варианта: 1) буфер мал; 2) путь не существует. А уж что там на самом деле - тебе виднее
Размер буфера 2560 - вряд ли мало.
а насчет не существует - через виндовый эксплорер я их могу скопировать.
Или может такое быть что через эксплорер копируются, а программно - нет??
а насчет не существует - через виндовый эксплорер я их могу скопировать.
Или может такое быть что через эксплорер копируются, а программно - нет??
В SAD - все в SAD.
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Есть ещё вариант: такого файла на диске не существует - он виртуальный.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Возможно.
Но ведь виндой-то я его могу вытянуть. Вот что меня ставит в тупик.
Но ведь виндой-то я его могу вытянуть. Вот что меня ставит в тупик.
В SAD - все в SAD.
Такой вопрос: а код
hr=folder->QueryInterface(IID_IPersistFolder2,(void**)&pf);
LPITEMIDLIST pidlFolder;
hr=pf->GetCurFolder(&pidlFolder);
возвращает полный или относительный пидл в фолдер?
че-то я в МСДНе этого не углядель
hr=folder->QueryInterface(IID_IPersistFolder2,(void**)&pf);
LPITEMIDLIST pidlFolder;
hr=pf->GetCurFolder(&pidlFolder);
возвращает полный или относительный пидл в фолдер?
че-то я в МСДНе этого не углядель
В SAD - все в SAD.