PSCreateDelayedMultiplexPropertyStore 函式 (propsys.h)
建立包含多個屬性存放區的唯讀延遲系結屬性存放區。
語法
PSSTDAPI PSCreateDelayedMultiplexPropertyStore(
GETPROPERTYSTOREFLAGS flags,
IDelayedPropertyStoreFactory *pdpsf,
[in] const DWORD *rgStoreIds,
[in] DWORD cStores,
[in] REFIID riid,
[out] void **ppv
);
參數
flags
一或多個 GETPROPERTYSTOREFLAGS 值。 這些值會指定所建立屬性存放區對象的詳細數據。
pdpsf
類型: IDelayedPropertyStoreFactory*
IDelayedPropertyStoreFactory 實例的介面指標。
[in] rgStoreIds
類型: const DWORD*
屬性存放區標識子陣列的指標。 此陣列不需要初始化。
[in] cStores
類型: DWORD
rgStoreIds 所指向之陣列中的項目數目。
[in] riid
類型: REFIID
將代表所建立屬性存放區之介面之要求的 IID 參考。
[out] ppv
類型: void**
當此函式傳回時,包含 riid中要求的介面指標。 這通常是 IPropertyStore。
傳回值
類型: HRESULT
如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
此函式會建立元件物件模型 (COM) 物件,該物件會實作 IPropertyStore、 INamedPropertyStore、 IObjectProvider 和 IPropertyStoreCapabilities。
應用程式一次只能從一個線程呼叫這個物件。
您必須先使用 CoInitialize 或 OleInitialize 初始化 COM,才能呼叫 PSCreateDelayedMultiplexPropertyStore。 COM 必須在此物件的存留期內保持初始化狀態。
PSCreateDelayedMultiplexPropertyStore 是設計為 PSCreateMultiplexPropertyStore 的替代方案,這需要先初始化屬性存放區陣列,再建立 multiplex 屬性存放區。
延遲的系結機制是設計為在多任務屬性存放區上呼叫 IPropertyStore::GetValue 的效能增強功能。 當要求屬性的值時,延遲的多任務屬性存放區會檢查每個屬性存放區的值。 找到值之後,就不需要建立和初始化後續存放區。 當其中一個屬性存放區傳回成功碼和非VT_EMPTY值時,延遲的 multiplex 屬性存放區會停止搜尋值。
當延遲的多任務屬性存放區需要存取特定屬性存放區時,它會先檢查它是否已取得該屬性存放區的介面。 如果沒有,它會使用適當的屬性存放區標識符來呼叫 IDelayedPropertyStoreFactory::GetDelayedPropertyStore ,以取得屬性存放區。 它一律會依應用程式提供標識碼的順序使用屬性存放區標識碼。 並非所有標識碼都會使用。
如果 呼叫 IDelayedPropertyStoreFactory 失敗,且特定屬性存放區標識碼E_NOTIMPL或E_ACCESSDENIED,或如果指定 GPS_BESTEFFORT的應用程式,則會忽略失敗,而延遲的多任務屬性存放區會移至下一個屬性存放區。
在某些情況下,使用 PSCreateDelayedMultiplexPropertyStore 取代 PSCreateMultiplexPropertyStore 可能會很有説明。 例如,如果應用程式需要多任務兩個屬性存放區,而第一個屬性存放區不是需要大量記憶體才能初始化,並提供PKEY_Size資訊。 通常,呼叫應用程式會要求多任務屬性存放區,然後在釋放物件之前只要求PKEY_Size。 在這種情況下,應用程式可以藉由呼叫 PSCreateDelayedMultiplexPropertyStore 並實作 IDelayedPropertyStoreFactory 來避免初始化第二個屬性存放區的成本。
範例
下列範例要包含在較大的程式中,示範如何在 IPropertyStoreFactory::GetPropertyStore 的實作中使用 PSCreateDelayedMultiplexPropertyStore。
// CMyFactory is a reference-counted COM object that implements both IPropertyStoreFactory and IDelayedPropertyStoreFactory.
// CMyFactory is assumed to be fully implemented, but for the sake of brevity,
// many functions are not shown here.
// Private functions are indicated with an underscore prefix.
// The hope is that the fastest property store satisfies the caller's queries
// so that the slower property stores are never created.
// 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.
// This application always creates its stores in-process, so it
// ignores the pUnkFactory value.
DWORD rgStoreIds[] = {0, 1, 2};
hr = PSCreateDelayedMultiplexPropertyStore(flags, this, rgStoreIds, ARRAYSIZE(rgStoreIds), riid, ppv);
}
return hr;
}
// CMyFactory implementation of IDelayedPropertyStoreFactory::GetDelayedPropertyStore
HRESULT CMyFactory::GetDelayedPropertyStore(GETPROPERTYSTOREFLAGS flags,
DWORD dwStoreId,
REFIID riid,
void **ppv)
{
*ppv = NULL;
HRESULT hr;
// Note: The IDs here match the IDs in rgStoreIds above.
if (dwStoreId == 0)
{
// This store is the fastest at returning properties.
hr = _CreateFastestPropertyStore(flags, riid, ppv);
}
else if (dwStoreId == 1)
{
// This store is slower at returning properties.
hr = _CreateSlowerPropertyStore(flags, riid, ppv);
}
else if (dwStoreId == 2)
{
// This store is very slow at returning properties.
hr = _CreateSlowestPropertyStore(flags, riid, ppv);
}
else
{
// This should never happen.
hr = E_UNEXPECTED;
}
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 |