shtypes.h (ITEMIDLIST 結構)
包含項目識別碼的清單。
語法
typedef struct _ITEMIDLIST {
SHITEMID mkid;
} ITEMIDLIST;
成員
mkid
類型: SHITEMID
項目識別碼的清單。
備註
這個結構的指標稱為 PIDL,可用來識別 Shell 命名空間中的物件。 如需專案標識碼清單指標 () 和專案標識碼的詳細資訊,請參閱 Shell命名空間簡介。
ITEMIDLIST Strict 類型
從 Windows Vista 起,有數種 形式的 ITEMIDLIST 可作為數據類型使用。 這三個主要類型包括:- IDLIST_ABSOLUTE:與命名空間根目錄相對的完整 ITEMIDLIST 。 可能是多層級的。
- IDLIST_RELATIVE:相對於父資料夾 的ITEMIDLIST 。 可能是多層級的。
- ITEMID_CHILD:相對於父資料夾的單一層級 ITEMIDLIST 。 它只包含一個 SHITEMID 結構。
#define STRICT_TYPED_ITEMIDS // Better type safety for IDLists
#include <shlobj.h> // Typical Shell header file
您可以使用下列一或多個修飾詞來改變這些類型的意義:
- P:類型是指針。
- C:類型為常數。
- U:類型未對齊。 它符合 32 位架構中的 DWORD 界限,以及 64 位架構中的 QWORD 界限。
- PIDLIST_ABSOLUTE: ITEMIDLIST 是絕對的,且已配置,如其非常數所表示。 這表示當不再需要 ILFree 時,它必須解除分配。 因為它是配置記憶體的直接指標,因此會對齊。
- PCIDLIST_ABSOLUTE: ITEMIDLIST 是絕對和常數。 當您將絕對 ITEMIDLIST 當做參數傳遞,但未擁有它時,通常會使用此功能,因此不允許變更它。
- PCUIDLIST_ABSOLUTE: ITEMIDLIST 為絕對、常數且未對齊。 這很少使用。 絕對 ITEMIDLIST 通常會配置在記憶體中對齊 32 位架構中的 DWORD 界限,以及 64 位架構中的 QWORD 界限。 只有在已與其他數據一起封裝時,絕對 ITEMIDLIST 才會取消對齊,例如串行化格式。
- PITEMID_CHILD: ITEMIDLIST 是相對於父資料夾配置的子 ITEMIDLIST ,例如 IEnumIDList::Next 的結果。 它只包含一個 SHITEMID 結構。
- PCUITEMID_CHILD:子 ITEMIDLIST 是相對、常數和未對齊。 當您取得現有 PIDL 一部分的指標時,通常會發生這種情況。 例如,如果您有絕對 PIDL 並呼叫 ILFindLastID,它會傳回清單中最後一個子 SHITEMID 的指標。 它未對齊,因為位元組封裝的 PIDL 無法確保其個別 SHITEMID 結構落在位元組界限上。 這類子 PIDL 的參考一律為常數,因為記憶體是由絕對 PIDL 所擁有。
- PCITEMID_CHILD:子 ITEMIDLIST 是常數且對齊。 這很少使用,因為做為子 PIDL,它通常是較大 PIDL 的一部分,因此不會對齊位元組界限。
- PUITEMID_CHILD:子 ITEMIDLIST 未對齊。 這很少使用,因為此 ITEMIDLIST 的記憶體是由父 PIDL 所擁有,這是絕對的。 這表示修改只能對父 PIDL 進行,因此子 PIDL 必須是常數。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | shtypes.h |