PSCreateMultiplexPropertyStore 函式 (propsys.h)
建立包含多個屬性存放區的唯讀屬性存放區,每個存放區都必須支援 IPropertyStore 或 IPropertySetStorage。
語法
PSSTDAPI PSCreateMultiplexPropertyStore(
[in] IUnknown **prgpunkStores,
[in] DWORD cStores,
[in] REFIID riid,
[out] void **ppv
);
參數
[in] prgpunkStores
類型: IUnknown**
實作 IPropertyStore 或 IPropertySetStorage 之屬性存放區陣列的指標位址。
[in] cStores
類型: DWORD
prgpunkStores 中所參考陣列中的元素數目。
[in] riid
類型: REFIID
要求的 IID 參考。
[out] ppv
類型: void**
當此函式傳回時,包含 riid中要求的介面指標。 這通常是 IPropertyStore。
傳回值
類型: HRESULT
如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
此函式會建立元件物件模型 (COM) 物件,該物件會實作 IPropertyStore、 INamedPropertyStore、 IObjectProvider 和 IPropertyStoreCapabilities。 multiplex 屬性存放區對象會匯總從多個屬性存放區公開的屬性。
此物件可用於在Shell命名空間延伸模組中匯總多個現有屬性存放區實作的屬性,或重複使用現有的屬性存放區,並提供額外的唯讀屬性。
應用程式一次只能從一個線程呼叫這個物件。
您必須先使用 CoInitialize 或 OleInitialize 初始化 COM,才能呼叫 PSCreateDelayedMultiplexPropertyStore。 COM 必須在此物件的存留期內保持初始化狀態。
陣列 prgpunkStores 中的每個物件都必須實作 IPropertyStore 或 IPropertySetStorage。 如果對象實作 IPropertySetStorage,則會使用 PSCreatePropertyStoreFromPropertySetStorage 包裝,以在 multiplex 屬性存放區中使用。
IPropertyStore::GetValue 的 multiplex 屬性存放區實作會要求每個提供的屬性存放區取得值。 當其中一個屬性存放區傳回成功碼和非VT_EMPTY值時,multiplex 屬性存放區會停止搜尋。 失敗碼會導致搜尋結束,並傳回給呼叫的應用程式。
IPropertyStoreCapabilities::IsPropertyWritable 的 multiplex 屬性存放區實作會將呼叫委派給實作 IPropertyStoreCapabilities 的第一個存放區。 如果多個存放區實作 IPropertyStoreCapabilities,則會忽略後續的存放區。 如果沒有存放區實作 IPropertyStoreCapabilities,此方法會傳回 S_OK。
範例
下列範例要包含在較大的程式中,示範如何在 IPropertyStoreFactory::GetPropertyStore 的實作中使用 PSCreateMultiplexPropertyStore。
// CMyFactory is a reference counted COM object that implements
// both IPropertyStoreFactory.
// CMyFactory is assumed to be fully implemented, but for the sake of brevity,
// many functions are not shown here.
// Private functions are prefixed with an underscore.
// CMyFactory implementation for IPropertyStoreFactory::GetPropertyStore.
HRESULT CMyFactory::GetPropertyStore(__in GETPROPERTYSTOREFLAGS flags,
__in_opt IUnknown *pUnkFactory,
__in REFIID riid,
__deref_out void **ppv)
{
*ppv = NULL;
HRESULT hr;
// This application creates only read-only stores.
if (flags & GPS_READWRITE)
{
hr = STG_E_ACCESSDENIED;
}
else
{
// More advanced applications would check other GETPROPERTYSTOREFLAGS
// flags and respond appropriately.
// CMyFactory multiplexes two property stores.
IPropertyStore *ppsFirst;
hr = _CreateFirstStore(IID_PPV_ARGS(&ppsFirst));
if (SUCCEEDED(hr))
{
IPropertyStore *ppsSecond;
hr = _CreateSecondStore(IID_PPV_ARGS(&ppsSecond));
if (SUCCEEDED(hr))
{
IUnknown *rgStores[] = {ppsFirst, ppsSecond};
hr = PSCreateMultiplexPropertyStore(rgStores, ARRAYSIZE(rgStores), riid, ppv);
ppsSecond->Release();
}
ppsFirst->Release();
}
}
return hr;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP 搭配 SP2、Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 SP1 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | propsys.h |
程式庫 | Propsys.lib |
Dll | Propsys.dll (6.0 版或更新版本) |
可轉散發套件 | Windows 桌面搜尋 (WDS) 3.0 |