Freigeben über


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
S_OK
Der Bindungsvorgang war erfolgreich.
MK_E_NOSTORAGE
Das durch diesen Moniker identifizierte Objekt verfügt nicht über einen eigenen Speicher.
MK_E_EXCEEDEDDEADLINE
Der Bindungsvorgang konnte nicht innerhalb des durch die BIND_OPTS Struktur des Bindungskontexts angegebenen Zeitlimits abgeschlossen werden.
MK_E_CONNECTMANUALLY
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.
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
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.
STG_E_ACCESSDENIED
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:

  • Der URL-Moniker ruft weitere Informationen für den Bindungsvorgang aus dem Bindungskontext ab. Der Moniker kann beispielsweise Zeiger auf die Schnittstellen IBindStatusCallback und IEnumFORMATETC abrufen, die im Bindungskontext registriert sind. Weitere Informationen können zusätzliche Bindungsoptionen umfassen, die im Bindungskontext über IBindCtx::SetBindOptions angegeben sind, z. B. der dwTickCountDeadline-Parameter oder der grfFlags-Wert von BIND_MAYBOTHERUSER. Der Moniker fragt dann den Client ab, indem er IBindStatusCallback::GetBindInfo aufruft, initiiert den Bindungsvorgang mit dem Transport und übergibt das resultierende IBinding an den Client, indem er IBindStatusCallback::OnStartBinding aufruft.
  • Wenn der Aufrufer einen asynchronen IStream oder IStorage angefordert hat, indem er das BINDF_ASYNCSTORAGE-Flag in der BINDINFO-Struktur angibt, die aus dem IBindStatusCallback::GetBindInfo abgerufen wurde, gibt die Methode der URL-Moniker das Objekt so schnell wie möglich zurück. Aufrufe dieser IStorage - oder IStream-Objekte , die auf noch nicht verfügbare Daten verweisen, geben E_PENDING zurück.
  • Wenn der Aufrufer nicht wie oben beschrieben asynchronen IStream oder IStorage angibt, gibt der URL-Moniker trotzdem so schnell wie möglich ein Objekt über die IBindStatusCallback::OnDataAvailable-Methode zurück. Aufrufe dieser Objekte, die auf noch nicht verfügbare Daten verweisen, werden jedoch blockiert, bis die Daten verfügbar sind. Für einige Anwendungen erfordert dies die geringste Änderung des vorhandenen E/A-Codes, kann jedoch je nach Zugriffsmustern dennoch zu einer verbesserten Leistung führen.

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

Weitere Informationen

Imoniker