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

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

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



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

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

最佳答案

PCIDLIST_ABSOLUTE_ARRAY类型与LPCITEMIDLIST *等价,即指向ITEMIDLISTs(也称为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及其变体。

10-04 14:47