1

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

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

但我真的不知道第二个参数有哪种类型。MSDN 说:

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

我无法在任何地方找到有关此类型的信息。不在 MSDN 中,不在我最喜欢的搜索引擎中。

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

4

1 回答 1

2

该类型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定义。如果定义了此符号,则 shell API 标头切换为使用“类型化”PIDL 指针,这在您打算使用绝对 PIDL、子 PIDL、const PIDL 等时更加明显。如果STRICT_TYPED_ITEMIDS未定义,您可以在任何地方使用 LPITEMIDLIST 及其变体。

于 2013-02-21T22:53:48.897 回答