我必须致电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及其变体。