Функция 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. Объект мультиплексного хранилища свойств объединяет свойства, предоставляемые из нескольких хранилищ свойств.
Этот объект может быть полезен для агрегирования свойств из нескольких существующих реализаций хранилища свойств в расширении пространства имен оболочки или для повторного использования существующего хранилища свойств и предоставления дополнительных свойств, доступных только для чтения.
Приложения должны вызывать этот объект только из одного потока за раз.
Перед вызовом PSCreateDelayedMultiplexPropertyStore необходимо инициализировать COM с помощью CoInitialize или OleInitialize. COM должен оставаться инициализированным в течение всего времени существования этого объекта.
Каждый из объектов в массиве prgpunkStores должен реализовывать IPropertyStore или IPropertySetStorage. Если объект реализует IPropertySetStorage, он упаковывается с помощью PSCreatePropertyStoreFromPropertySetStorage для использования в хранилище свойств мультиплекса.
Реализация хранилища свойств мультиплекса IPropertyStore::GetValue запрашивает у каждого из предоставленных хранилищ свойств значение. Хранилище свойств мультиплекса прекращает поиск, когда одно из хранилищ свойств возвращает код успешного выполнения и значение, отличное от VT_EMPTY. Коды сбоев приводят к завершению поиска и передаются обратно в вызывающее приложение.
Реализация хранилища свойств мультиплекса IPropertyStoreCapabilities::IsPropertyWritable делегирует вызов первому хранилищу, реализующего IPropertyStoreCapabilities. Если несколько хранилищ реализуют IPropertyStoreCapabilities, последующие из них игнорируются. Если ни в каких хранилищах не реализован интерфейс IPropertyStoreCapabilities, этот метод возвращает S_OK.
Примеры
В следующем примере, который будет включен в более крупную программу, показано, как использовать PSCreateMultiplexPropertyStore в реализации IPropertyStoreFactory::GetPropertyStore.
// 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 с пакетом обновления 2 (SP2), Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 с пакетом обновления 1 (SP1) [только классические приложения] |
Целевая платформа | Windows |
Header | propsys.h |
Библиотека | Propsys.lib |
DLL | Propsys.dll (версия 6.0 или более поздняя) |
Распространяемые компоненты | Windows Desktop Search (WDS) 3.0 |