IMoniker::BindToStorage-Methode (objidl.h)
Bindet an den Speicher für das angegebene Objekt. Im Gegensatz zur IMoniker::BindToObject-Methode aktiviert diese Methode das vom Moniker identifizierte Objekt nicht.
Syntax
HRESULT BindToStorage(
[in] IBindCtx *pbc,
[in] IMoniker *pmkToLeft,
[in] REFIID riid,
[out] void **ppvObj
);
Parameter
[in] pbc
Ein Zeiger auf die IBindCtx-Schnittstelle im Bindungskontextobjekt, das in diesem Bindungsvorgang verwendet wird. Der Bindungskontext zwischenspeichert Objekte, die während des Bindungsprozesses gebunden sind, enthält Parameter, die für alle Vorgänge gelten, die den Bindungskontext verwenden, und stellt die Mittel bereit, mit denen die moniker-Implementierung Informationen zu ihrer Umgebung abrufen soll.
[in] pmkToLeft
Wenn der Moniker Teil eines zusammengesetzten Monikers ist, zeigen Sie auf den Moniker links von diesem Moniker. Dieser Parameter wird hauptsächlich von Moniker-Implementierern verwendet, um die Zusammenarbeit zwischen den verschiedenen Komponenten eines zusammengesetzten Monikers zu ermöglichen. Moniker-Clients sollten NULL verwenden.
[in] riid
Ein Verweis auf den Bezeichner der angeforderten Speicherschnittstelle, deren Zeiger in ppvObj zurückgegeben wird. Zu den häufig angeforderten Speicherschnittstellen gehören IStorage, IStream und ILockBytes.
[out] ppvObj
Die Adresse der Zeigervariable, die den in riid angeforderten Schnittstellenzeiger empfängt. Nach erfolgreicher Rückgabe enthält *ppvObj den angeforderten Schnittstellenzeiger auf den Speicher des Objekts, das der Moniker identifiziert. Bei erfolgreicher Implementierung muss AddRef im Speicher aufgerufen werden. Es liegt in der Verantwortung des Aufrufers , Release aufzurufen. Wenn ein Fehler auftritt, sollte *ppvObjNULL sein.
Rückgabewert
Diese Methode kann die Standardrückgabewerte E_UNEXPECTED sowie die folgenden Werte zurückgeben.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Der Bindungsvorgang war erfolgreich. |
|
Das durch diesen Moniker identifizierte Objekt verfügt nicht über einen eigenen Speicher. |
|
Der Bindungsvorgang konnte nicht innerhalb des durch die BIND_OPTS Struktur des Bindungskontexts angegebenen Zeitlimits abgeschlossen werden. |
|
Der Vorgang konnte keine Verbindung mit dem Speicher herstellen, möglicherweise weil ein Netzwerkgerät nicht mit verbunden werden konnte. Weitere Informationen finden Sie unter IMoniker::BindToObject. |
|
Es wurde ein Zwischenobjekt gefunden, aber es unterstützte keine Schnittstelle, die zum Abschließen des Bindungsvorgangs erforderlich ist. Beispielsweise gibt ein Elementmoniker diesen Wert zurück, wenn sein Container die IOleItemContainer-Schnittstelle nicht unterstützt. |
|
Auf das Speicherobjekt kann nicht zugegriffen werden. |
Diese Methode kann auch die Fehler zurückgeben, die der IOleItemContainer::GetObject-Methode zugeordnet sind.
Hinweise
Es gibt einen wichtigen Unterschied zwischen den Methoden BindToObject und BindToStorage . Wenn Sie beispielsweise über einen Moniker verfügen, der ein Tabellenkalkulationsobjekt identifiziert, bietet der Aufruf von BindToObject Zugriff auf das Tabellenkalkulationsobjekt selbst, während das Aufrufen von BindToStorage Zugriff auf das Speicherobjekt bietet, in dem sich die Kalkulationstabelle befindet.
Hinweise für Anrufer
Obwohl keine der COM-Moniker-Klassen diese Methode in ihren Bindungsvorgängen aufruft, ist es möglicherweise angebracht, sie bei der Implementierung einer neuen Monikerklasse aufzurufen. Sie können diese Methode in einer Implementierung von BindToObject aufrufen, die Informationen von dem Objekt erfordert, das durch den parameter pmkToLeft identifiziert wird, und sie ohne Aktivierung aus dem persistenten Speicher des Objekts abrufen kann. Wenn Ihre Moniker beispielsweise verwendet werden, um Objekte zu identifizieren, die aktiviert werden können, ohne deren Container zu aktivieren, finden Sie diese Methode möglicherweise nützlich.Ein Client, der den Speicher des Objekts lesen kann, das der Moniker identifiziert, kann diese Methode auch aufrufen.
Hinweise zu Implementierern
Ihre Implementierung sollte den persistenten Speicher für das durch den aktuellen Moniker identifizierte Objekt suchen und den gewünschten Schnittstellenzeiger zurückgeben. Einige Monikertypen stellen Pseudoobjekte dar, d. h. Objekte, die keinen eigenen persistenten Speicher haben. Solche Objekte umfassen einen Teil des internen Zustands ihres Containers, z. B. einen Zellbereich in einer Kalkulationstabelle. Wenn Ihre Monikerklasse diesen Objekttyp identifiziert, sollte Ihre Implementierung von BindToStorage den Fehler MK_E_NOSTORAGE zurückgeben.Wenn die BIND_OPTS Struktur des Bindungskontexts das BINDFLAGS_JUSTTESTEXISTENCE-Flag angibt, hat Ihre Implementierung die Möglichkeit , NULL in ppvObj zurückzugeben (obwohl Sie das Flag auch ignorieren und den vollständigen Bindungsvorgang ausführen können).
Implementierungsspezifische Hinweise
Implementierung | Hinweise |
---|---|
Antimoniker | Diese Methode gibt E_NOTIMPL zurück. |
Klassenmoniker | Diese Methode leitet an das BindToObject des Klassenmonikers weiter. |
Dateimoniker | Diese Methode öffnet die Datei, die durch den Pfad angegeben wird, der durch den Moniker dargestellt wird, und gibt einen IStorage-Zeiger auf diese Datei zurück. Die -Methode unterstützt nur die Bindung an die IStorage-Schnittstelle . wenn IStream oder ILockBytes in riid angefordert wird, gibt die Methode E_UNSPEC zurück, und wenn andere Schnittstellen angefordert werden, gibt diese Methode E_NOINTERFACE zurück. Sofern pmkToLeft kein Klassenmoniker ist, sollte pmkToLeftNULL sein, wie in der Implementierung von IMoniker::BindToObject. |
Generischer zusammengesetzter Moniker | Diese Methode ruft BindToStorage rekursiv auf der rechtssten Komponente des Zusammengesetzten auf und übergibt den Rest des Zusammengesetzten als pmkToLeft-Parameter für diesen Aufruf. |
Elementmoniker | Wenn pmkToLeftNULL ist, gibt diese Methode E_INVALIDARG zurück. Andernfalls ruft die -Methode IMoniker::BindToObject für den pmkToLeft-Parameter auf und fordert einen IOleItemContainer-Schnittstellenzeiger an. Die -Methode ruft dann IOleItemContainer::GetObjectStorage für die angeforderte Schnittstelle auf. |
OBJREF-Moniker | Diese Methode ruft einen gemarselten Zeiger auf die angeforderte Schnittstelle im Speicher ab, der das ausgeführte Objekt enthält. Da der OBJREF-Moniker ein ausgeführtes Objekt darstellt, findet keine Aktivierung statt. Wenn das dargestellte Objekt nicht mehr ausgeführt wird, schlägt BindToStorage mit E_UNEXPECTED fehl. |
Zeigermoniker | Diese Methode fragt den umschlossenen Zeiger für die angeforderte Schnittstelle ab. |
URL-Moniker |
Die Systemimplementierung von URL-Monikern unterstützt BindToStorage für Streamobjekte auf allen URLs und für Speicherobjekte, wenn es sich bei der angegebenen Ressource um eine zusammengesetzte Datei handelt.
Da der URL-Moniker asynchrone Bindung unterstützt, kann der tatsächliche Rückgabewert seiner BindToStorage abhängig von den im Bindungskontext eingerichteten Objektparametern variieren. Die Semantik des Bindungsvorgangs ist jedoch unabhängig von der synchronen oder asynchronen Verwendung wie folgt identisch:
|
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | objidl.h |