PSCreateMultiplexPropertyStore-Funktion (propsys.h)
Erstellt einen schreibgeschützten Eigenschaftenspeicher, der mehrere Eigenschaftenspeicher enthält, von denen jeder entweder IPropertyStore oder IPropertySetStorage unterstützen muss.
Syntax
PSSTDAPI PSCreateMultiplexPropertyStore(
[in] IUnknown **prgpunkStores,
[in] DWORD cStores,
[in] REFIID riid,
[out] void **ppv
);
Parameter
[in] prgpunkStores
Typ: IUnknown**
Adresse eines Zeigers auf ein Array von Eigenschaftenspeichern, die entweder IPropertyStore oder IPropertySetStorage implementieren.
[in] cStores
Art: DWORD
Die Anzahl der Elemente im Array, auf die in prgpunkStores verwiesen wird.
[in] riid
Typ: REFIID
Verweis auf die angeforderte IID.
[out] ppv
Typ: void**
Wenn diese Funktion zurückgibt, enthält den in riid angeforderten Schnittstellenzeiger. Dies ist in der Regel IPropertyStore.
Rückgabewert
Typ: HRESULT
Wenn diese Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.
Hinweise
Diese Funktion erstellt ein COM-Objekt (Component Object Model), das IPropertyStore, INamedPropertyStore, IObjectProvider und IPropertyStoreCapabilities implementiert. Das Multiplex-Eigenschaftenspeicherobjekt aggregiert die Eigenschaften, die aus mehreren Eigenschaftenspeichern verfügbar gemacht werden.
Dieses Objekt kann nützlich sein, um die Eigenschaften aus mehreren vorhandenen Eigenschaftenspeicherimplementierungen in einer Shell-Namespaceerweiterung zu aggregieren oder einen vorhandenen Eigenschaftenspeicher wiederzuverwenden und zusätzliche schreibgeschützte Eigenschaften bereitzustellen.
Anwendungen müssen dieses Objekt jeweils nur aus einem Thread aufrufen.
Sie müssen COM mit CoInitialize oder OleInitialize initialisieren , bevor Sie PSCreateDelayedMultiplexPropertyStore aufrufen. COM muss für die Lebensdauer dieses Objekts initialisiert bleiben.
Jedes der Objekte im Array prgpunkStores muss entweder IPropertyStore oder IPropertySetStorage implementieren. Wenn ein Objekt IPropertySetStorage implementiert, wird es mit PSCreatePropertyStoreFromPropertySetStorage zur Verwendung im Multiplex-Eigenschaftenspeicher umschlossen.
Die Multiplex-Eigenschaftenspeicherimplementierung von IPropertyStore::GetValue fragt jeden der bereitgestellten Eigenschaftenspeicher nach dem Wert. Der Multiplex-Eigenschaftenspeicher beendet die Suche, wenn einer der Eigenschaftenspeicher einen Erfolgscode und einen nicht VT_EMPTY Wert zurückgibt. Fehlercodes führen dazu, dass die Suche beendet wird und an die aufrufende Anwendung zurückgegeben wird.
Die Multiplex-Eigenschaftenspeicherimplementierung von IPropertyStoreCapabilities::IsPropertyWritable delegiert den Aufruf an den ersten Speicher, der IPropertyStoreCapabilities implementiert. Wenn mehrere Speicher IPropertyStoreCapabilities implementieren, werden die nachfolgenden Speicher ignoriert. Wenn kein Speicher IPropertyStoreCapabilities implementiert, gibt diese Methode S_OK zurück.
Beispiele
Das folgende Beispiel, das als Teil eines größeren Programms enthalten sein soll, veranschaulicht die Verwendung von PSCreateMultiplexPropertyStore in einer Implementierung von 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;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP mit SP2, Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 mit SP1 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | propsys.h |
Bibliothek | Propsys.lib |
DLL | Propsys.dll (Version 6.0 oder höher) |
Verteilbare Komponente | Windows Desktop Search (WDS) 3.0 |