Сохраните pidl (ITEMIDLIST)

Я предполагаю, что это добавляет много издержек для каждого класса. Каждый класс должен 'искаться'. Вы создаете новые объекты Throwable сделать это... Эти throwables не прибывают бесплатно.

6
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Согласно Раймонду Чену , вы можете сохранить структуру pidl - или, более конкретно, структуру SHITEMID , просто записав длину элемента а затем байты.

Обратите внимание, что эта структура является типичной структурой переменной длины Windows, с элементом cb («количество байтов»), определяющим длину структуры в байтах, за которым следуют остальные данные. Другими словами, чтобы написать структуру, вам нужно записать байты cb. Чтобы прочитать его, вам нужно выделить cb байт памяти и установить поле cb.

Будьте осторожны, не используйте sizeof (SHITEMID), потому что способ его объявления предполагает только один байт для поля abID, поэтому он не будет большим достаточно.

4
ответ дан 17 December 2019 в 02:30
поделиться

ILSaveToStream и ILLoadFromStream (и, возможно, ILLoadFromStreamEx). Однако есть одно предостережение: ILLoadFromStream и ILLoadFromStreamEx устарели, и если Microsoft сказала, что должно их заменить, я не знаю об этом.

1
ответ дан 17 December 2019 в 02:30
поделиться

На внутреннем уровне pidls нет стандарта. В конце концов, pidl используется только для поиска элементов. Пока pidl распознается (или предсказуемо терпит неудачу) генератором и преобразователем PIDL (проводником Windows или сторонними расширениями пространства имен оболочки), Explorer.exe работает. Никто не говорит, что PIDL должен сохраняться при перезагрузке машины или на рабочих столах пользователей.

В одном случае вы можете сделать обоснованное предположение, сохраняется ли pidl после перезагрузки компьютера, - это проверить атрибут SFGAO_CANLINK. Объявляя этот атрибут, преобразователь PIDL объявляет, что вы можете перетащить элемент в папку, чтобы создать ярлык на рабочем столе, который содержит PIDL элемента. Решатель должен обрабатывать постоянство и обратную совместимость в PIDL, иначе двойной щелчок по ярлыку приведет к сбою процесса Explorer.

1
ответ дан 17 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: