Méthode IMoniker ::BindToStorage (objidl.h)
Lie au stockage de l’objet spécifié. Contrairement à la méthode IMoniker ::BindToObject , cette méthode n’active pas l’objet identifié par le moniker.
Syntaxe
HRESULT BindToStorage(
[in] IBindCtx *pbc,
[in] IMoniker *pmkToLeft,
[in] REFIID riid,
[out] void **ppvObj
);
Paramètres
[in] pbc
Pointeur vers l’interface IBindCtx sur l’objet de contexte de liaison, qui est utilisé dans cette opération de liaison. Le contexte de liaison met en cache les objets liés pendant le processus de liaison, contient des paramètres qui s’appliquent à toutes les opérations utilisant le contexte de liaison et fournit les moyens par lesquels l’implémentation du moniker doit récupérer des informations sur son environnement.
[in] pmkToLeft
Si le moniker fait partie d’un moniker composite, pointez vers le moniker à gauche de ce moniker. Ce paramètre est principalement utilisé par les implémenteurs moniker pour permettre la coopération entre les différents composants d’un moniker composite. Les clients Moniker doivent utiliser la valeur NULL.
[in] riid
Référence à l’identificateur de l’interface de stockage demandée, dont le pointeur sera retourné dans ppvObj. Les interfaces de stockage couramment demandées incluent IStorage, IStream et ILockBytes.
[out] ppvObj
Adresse de la variable pointeur qui reçoit le pointeur d’interface demandé dans riid. Une fois le retour réussi, *ppvObj contient le pointeur d’interface demandé vers le stockage de l’objet identifié par le moniker. En cas de réussite, l’implémentation doit appeler AddRef sur le stockage. Il incombe à l’appelant d’appeler Release. Si une erreur se produit, *ppvObj doit avoir la valeur NULL.
Valeur retournée
Cette méthode peut retourner les valeurs de retour standard E_UNEXPECTED, ainsi que les valeurs suivantes.
Code de retour | Description |
---|---|
|
L’opération de liaison a réussi. |
|
L’objet identifié par ce moniker n’a pas son propre stockage. |
|
L’opération de liaison n’a pas pu être effectuée dans le délai spécifié par la structure BIND_OPTS du contexte de liaison. |
|
L’opération n’a pas pu se connecter au stockage, peut-être parce qu’un périphérique réseau n’a pas pu être connecté. Pour plus d’informations, consultez IMoniker ::BindToObject. |
|
Un objet intermédiaire a été trouvé, mais il ne prend pas en charge une interface requise pour terminer l’opération de liaison. Par exemple, un moniker d’élément retourne cette valeur si son conteneur ne prend pas en charge l’interface IOleItemContainer . |
|
Impossible d’accéder à l’objet de stockage. |
Cette méthode peut également retourner les erreurs associées à la méthode IOleItemContainer ::GetObject .
Remarques
Il existe une différence importante entre les méthodes BindToObject et BindToStorage . Si, par exemple, vous avez un moniker qui identifie un objet de feuille de calcul, l’appel de BindToObject permet d’accéder à l’objet de feuille de calcul lui-même, tandis que l’appel de BindToStorage permet d’accéder à l’objet de stockage dans lequel réside la feuille de calcul.
Remarques aux appelants
Bien qu’aucune des classes de moniker COM n’appelle cette méthode dans leurs opérations de liaison, il peut être approprié de l’appeler dans l’implémentation d’une nouvelle classe moniker. Vous pouvez appeler cette méthode dans une implémentation de BindToObject qui nécessite des informations à partir de l’objet identifié par le paramètre pmkToLeft et peut les obtenir à partir du stockage persistant de l’objet sans activation. Par exemple, si vos monikers sont utilisés pour identifier des objets qui peuvent être activés sans activer leurs conteneurs, vous pouvez trouver cette méthode utile.Un client qui peut lire le stockage de l’objet que son moniker identifie peut également appeler cette méthode.
Remarques aux implémenteurs
Votre implémentation doit localiser le stockage persistant de l’objet identifié par le moniker actuel et retourner le pointeur d’interface souhaité. Certains types de monikers représentent des pseudo-objets, qui sont des objets qui n’ont pas leur propre stockage persistant. Ces objets comprennent une partie de l’état interne de son conteneur, par exemple une plage de cellules dans une feuille de calcul. Si votre classe moniker identifie ce type d’objet, votre implémentation de BindToStorage doit retourner l’erreur MK_E_NOSTORAGE.Si la structure BIND_OPTS du contexte de liaison spécifie l’indicateur de BINDFLAGS_JUSTTESTEXISTENCE, votre implémentation a la possibilité de retourner NULL dans ppvObj (bien que vous puissiez également ignorer l’indicateur et effectuer l’opération de liaison complète).
Notes spécifiques à l’implémentation
Implémentation | Notes |
---|---|
Anti-moniker | Cette méthode retourne E_NOTIMPL. |
Moniker de classe | Cette méthode est transmise au bindToObject du moniker de classe. |
Moniker de fichier | Cette méthode ouvre le fichier spécifié par le chemin d’accès représenté par le moniker et retourne un pointeur IStorage vers ce fichier. La méthode prend en charge la liaison à l’interface IStorage uniquement ; si IStream ou ILockBytes est demandé dans riid, la méthode retourne E_UNSPEC et, si d’autres interfaces sont demandées, cette méthode renvoie E_NOINTERFACE. Sauf si pmkToLeft est un moniker de classe, pmkToLeft doit être NULL, comme dans l’implémentation de IMoniker ::BindToObject. |
Moniker composite générique | Cette méthode appelle de manière récursive BindToStorage sur le composant le plus à droite du composite, en passant le reste du composite en tant que paramètre pmkToLeft pour cet appel. |
Moniker d’élément | Si pmkToLeft a la valeur NULL, cette méthode retourne E_INVALIDARG. Sinon, la méthode appelle IMoniker ::BindToObject sur le paramètre pmkToLeft , en demandant un pointeur d’interface IOleItemContainer . La méthode appelle ensuite IOleItemContainer ::GetObjectStorage pour l’interface demandée. |
MONIKER OBJREF | Cette méthode obtient un pointeur marshalé vers l’interface demandée sur le stockage qui contient l’objet en cours d’exécution. Étant donné que le moniker OBJREF représente un objet en cours d’exécution, aucune activation n’a lieu. Si l’objet représenté n’est plus en cours d’exécution, BindToStorage échoue avec E_UNEXPECTED. |
Moniker de pointeur | Cette méthode interroge le pointeur encapsulé pour l’interface demandée. |
Moniker d’URL |
L’implémentation système des monikers d’URL prend en charge BindToStorage pour les objets de flux sur toutes les URL et pour les objets de stockage dans le cas où la ressource désignée est un fichier composé.
Étant donné que le moniker d’URL prend en charge la liaison asynchrone, la valeur de retour réelle de son BindToStorage peut varier en fonction des paramètres d’objet établis dans le contexte de liaison. Toutefois, la sémantique de l’opération de liaison est identique quelle que soit l’utilisation synchrone ou asynchrone, comme suit :
|
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | objidl.h |