我必须调用 IApplicationActivationManager::ActivateForProtocol用于打开 Windows 8 应用程序,因此我必须提供 IShellItemArray*
数据。
基本上,我只想创建一个新的 IShellItemArray
,所以我尝试调用 SHCreateShellItemArrayFromIDLists .
但我真的不知道第二个参数的类型。 MSDN 说:
rgpidl [in]
Type: PCIDLIST_ABSOLUTE_ARRAY
A list of cidl constant pointers to ITEMIDLIST structures.
我找不到任何关于这种类型的信息。不在 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
定义。如果定义了此符号,则 shell API header 将切换为使用“类型化”PIDL 指针,这在您打算使用绝对 PIDL、子 PIDL、常量 PIDL 等时会更加明显。如果 STRICT_TYPED_ITEMIDS
未定义,您可以在任何地方使用 LPITEMIDLIST 及其变体。
关于c++ - 为 IShellItemArray 创建 PCIDLIST_ABSOLUTE_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009458/