2013-02-21 1 views
1

Мне нужно позвонить IApplicationActivationManager::ActivateForProtocol для открытия приложения Windows 8, поэтому я должен предоставить данные IShellItemArray*.Создать PCIDLIST_ABSOLUTE_ARRAY для IShellItemArray

В принципе, я просто хочу создать новый IShellItemArray, поэтому я пытаюсь позвонить SHCreateShellItemArrayFromIDLists.

Но я не действительно знаю, какой тип имеет второй параметр. MSDN говорит:

rgpidl [в]
    Тип: PCIDLIST_ABSOLUTE_ARRAY
        Список бит CIDL постоянных указателей ITEMIDLIST структур.

Я не могу найти нигде информации об этом типе. Не в MSDN, не в моей любимой поисковой системе.

Я был бы рад, если бы кто-то мог прояснить этот тип и его создание/инициализацию или предоставить некоторый пример кода.

+1

Вы связались с документацией 'ITEMIDLIST' (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773321.aspx) в упомянутой выше документации? В нем объясняется, как работает «ITEMIDLIST» и что означает «IDLIST_ABSOLUTE». –

+0

@RemyLebeau Да, я сделал, но документация все еще не ясна, как ответ Джонатана. На этих страницах MSDN просто отсутствует образец кода, который, на мой взгляд, немного проще отслеживать, чем \t непрерывный текст. – ComFreek

ответ

2

Тип PCIDLIST_ABSOLUTE_ARRAY эквивалентен LPCITEMIDLIST *, то есть массив постоянных указателей на ITEMIDLIST (иначе известный как PIDL). Атрибут «ABSOLUTE» указывает на то, что PIDL должны быть абсолютными (то есть полностью квалифицированными PIDL, начинающимися на рабочем столе), а не дочерними PIDL (относительно некоторой папки).

Вы можете создать его так же, как и любой массив, например.

PCIDLIST_ABSOLUTE pIdlArray[10]; 
pIdlArray[0] = myFirstPidl; 
pIdlArray[1] = mySecondPidl; 
... 

Причиной различных ЬурейеЕ является STRICT_TYPED_ITEMIDS определить. Если этот символ определен, заголовки API оболочки переключаются на использование «типизированных» указателей PIDL, что делает его гораздо более очевидным, когда вы должны использовать абсолютный PIDL, дочерний PIDL, const PIDL и т. Д. Если STRICT_TYPED_ITEMIDS не определен , вы можете использовать LPITEMIDLIST и его варианты везде.

+0

Вы объявляете массив значений 'PCIDLIST_ABSOLUTE_ARRAY', что неверно. Вам нужно объявить массив значений 'PIDLIST_ABSOLUTE':' PIDLIST_ABSOLUTE pIdlArray [10]; ' –

+0

Конечно, вы правы, спасибо. Моя единственная защита - у меня еще не было моего утреннего кофе! –

+0

Спасибо за четкий ответ! – ComFreek

Смежные вопросы