共用方式為


PSCreateMultiplexPropertyStore 函式 (propsys.h)

建立包含多個屬性存放區的唯讀屬性存放區,每個存放區都必須支援 IPropertyStoreIPropertySetStorage

語法

PSSTDAPI PSCreateMultiplexPropertyStore(
  [in]  IUnknown **prgpunkStores,
  [in]  DWORD    cStores,
  [in]  REFIID   riid,
  [out] void     **ppv
);

參數

[in] prgpunkStores

類型: IUnknown**

實作 IPropertyStoreIPropertySetStorage 之屬性存放區陣列的指標位址。

[in] cStores

類型: DWORD

prgpunkStores 中所參考陣列中的元素數目。

[in] riid

類型: REFIID

要求的 IID 參考。

[out] ppv

類型: void**

當此函式傳回時,包含 riid中要求的介面指標。 這通常是 IPropertyStore

傳回值

類型: HRESULT

如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

此函式會建立元件物件模型 (COM) 物件,該物件會實作 IPropertyStoreINamedPropertyStoreIObjectProviderIPropertyStoreCapabilities。 multiplex 屬性存放區對象會匯總從多個屬性存放區公開的屬性。

此物件可用於在Shell命名空間延伸模組中匯總多個現有屬性存放區實作的屬性,或重複使用現有的屬性存放區,並提供額外的唯讀屬性。

應用程式一次只能從一個線程呼叫這個物件。

您必須先使用 CoInitializeOleInitialize 初始化 COM,才能呼叫 PSCreateDelayedMultiplexPropertyStore。 COM 必須在此物件的存留期內保持初始化狀態。

陣列 prgpunkStores 中的每個物件都必須實作 IPropertyStoreIPropertySetStorage。 如果對象實作 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

另請參閱

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore