2013-02-21 50 views
1

我必須撥打IApplicationActivationManager::ActivateForProtocol來打開Windows 8應用程序,因此我必須提供IShellItemArray*數據。爲IShellItemArray創建PCIDLIST_ABSOLUTE_ARRAY

基本上,我只是想創建一個新的IShellItemArray,所以我嘗試撥打SHCreateShellItemArrayFromIDLists

但我沒有確實知道第二個參數的類型。 MSDN說:

rgpidl [中]
   類型:PCIDLIST_ABSOLUTE_ARRAY
        CIDL恆定指向ITEMIDLIST結構的列表。

我找不到任何有關此類型的信息。不在MSDN中,不在我最喜歡的搜索引擎中。

我會很高興,如果有人可以澄清此類型及其創建/初始化或可以提供一些示例代碼。

+1

您是否在上述文檔中關注了[ITEMIDLIST'文檔](http://msdn.microsoft.com/zh-cn/library/windows/desktop/bb773321.aspx)的鏈接?它解釋了ITEMIDLIST如何工作以及IDLIST_ABSOLUTE表示什麼。 – 2013-02-21 22:53:49

+0

@RemyLebeau是的,我做了,但文件仍然不清楚,現在喬納森的迴應。這些MSDN頁面完全沒有示例代碼,在我看來,它比\t連續文本更容易遵循。 – ComFreek 2013-02-24 14:00:28

回答

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頭文件會切換到使用「typed」PIDL指針,這使得當您打算使用絕對PIDL,子PIDL,常量PIDL等時更加明顯。如果未定義STRICT_TYPED_ITEMIDS ,你可以在任何地方使用LPITEMIDLIST及其變體。

+0

您正在聲明一個「PCIDLIST_ABSOLUTE_ARRAY」值的數組,這是不正確的。你需要聲明一個'PIDLIST_ABSOLUTE'值的數組:'PIDLIST_ABSOLUTE pIdlArray [10];' – 2013-02-21 22:55:24

+0

當然你是對的,謝謝。我唯一的防守就是我還沒有喝過早晨的咖啡! – 2013-02-21 22:57:36

+0

感謝您的明確迴應! – ComFreek 2013-02-24 13:57:35