Create PCIDLIST_ABSOLUTE_ARRAY for IShellItemArray

Create PCIDLIST_ABSOLUTE_ARRAY for IShellItemArray

本文关键字:for IShellItemArray ARRAY ABSOLUTE PCIDLIST Create      更新时间:2023-10-16

我必须调用IApplicationActivationManager::ActivateForProtocol才能打开Windows 8应用程序,因此我必须提供IShellItemArray*数据。

基本上,我只想创建一个新的IShellItemArray,所以我尝试调用SHCreateShellItemArrayFromIDLists。

但是我真的不知道第二个参数的类型。MSDN表示:

rgpidl[in]
 nbsp;类型:PCIDLIST_ABSOLUTE_ARAY
 nbsp nbsp;指向ITEMIDLIST结构的cidl常量指针的列表。

我找不到任何关于这种类型的信息。MSDN中没有,我最喜欢的搜索引擎中也没有。

如果有人能澄清这种类型及其创建/初始化,或者能提供一些示例代码,我会很高兴。

类型PCIDLIST_ABSOLUTE_ARRAY等效于LPCITEMIDLIST *,即指向ITEMIDLIST(也称为PIDL)的常量指针数组。typedef的"ABSOLUTE"部分表示PIDL必须是绝对的(即从桌面开始的完全限定的PIDL),而不是子PIDL(相对于某个文件夹)。

你可以像制作任何阵列一样创建一个阵列,例如

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

typedef不同的原因是STRICT_TYPED_ITEMIDS的定义。如果定义了此符号,则外壳API头将切换为使用"类型化"PIDL指针,这使得当您打算使用绝对PIDL、子PIDL、常量PIDL等时更加明显。如果未定义STRICT_TYPED_ITEMIDS,则可以在任何地方使用LPITEMIDLIST及其变体。