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。 多路复用属性存储对象聚合从多个属性存储公开的属性。
此对象可用于聚合 Shell 命名空间扩展中多个现有属性存储实现中的属性,或重用现有属性存储以及提供其他只读属性。
应用程序一次只能从一个线程调用此对象。
在调用 PSCreateDelayedMultiplexPropertyStore 之前,必须使用 CoInitialize 或 OleInitialize 初始化 COM。 COM 必须在此对象的生存期内保持初始化状态。
数组 prgpunkStores 中的每个对象都必须实现 IPropertyStore 或 IPropertySetStorage。 如果对象实现 IPropertySetStorage,则会使用 PSCreatePropertyStoreFromPropertySetStorage 对其进行包装,以便在多路复用属性存储中使用。
IPropertyStore::GetValue 的多路复用属性存储实现请求每个提供的属性存储值。 当其中一个属性存储返回成功代码和非VT_EMPTY值时,多路复用属性存储会停止搜索。 失败代码导致搜索结束,并传回调用应用程序。
IPropertyStoreCapabilities::IsPropertyWritable 的多路复用属性存储实现将调用委托给实现 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 |
Library | Propsys.lib |
DLL | Propsys.dll (版本 6.0 或更高版本) |
可再发行组件 | Windows 桌面搜索 (WDS) 3.0 |