IBindCtx ::RegisterObjectParam, méthode (objidl.h)
Associe un objet à une clé de chaîne dans la table de pointeurs à clé de chaîne du contexte de liaison.
Syntaxe
HRESULT RegisterObjectParam(
[in] LPOLESTR pszKey,
[in] IUnknown *punk
);
Paramètres
[in] pszKey
Clé de chaîne de contexte de liaison sous laquelle l’objet est inscrit. La comparaison de chaînes de clé respecte la casse.
[in] punk
Pointeur vers l’interface IUnknown sur l’objet à inscrire.
La méthode appelle AddRef sur le pointeur.
Valeur retournée
Cette méthode peut retourner les valeurs de retour standard E_OUTOFMEMORY et S_OK.
Remarques
Un contexte de liaison gère une table de pointeurs d’interface, chacun associé à une clé de chaîne. Cela permet la communication entre une implémentation de moniker et l’appelant qui a lancé l’opération de liaison. Une partie peut stocker un pointeur d’interface sous une chaîne connue des deux parties afin que l’autre partie puisse le récupérer ultérieurement à partir du contexte de liaison.
Les opérations de liaison postérieures à l’utilisation de cette méthode peuvent utiliser IBindCtx ::GetObjectParam pour récupérer le pointeur stocké.
Notes aux appelants
RegisterObjectParam est utile pour ceux qui implémentent une nouvelle classe moniker (via une implémentation d’IMoniker) et pour les clients moniker (ceux qui utilisent des monikers pour se lier à des objets).Lors de l’implémentation d’une nouvelle classe moniker, vous appelez cette méthode lorsqu’une erreur se produit pendant la liaison moniker pour informer l’appelant de la cause de l’erreur. La clé que vous obtiendriez avec un appel à cette méthode dépend de la condition d’erreur. Voici une liste d’erreurs courantes de liaison de moniker, décrivant pour chacune les clés appropriées :
- MK_E_EXCEEDEDDEADLINE : si une opération de liaison dépasse son délai parce qu’un objet donné n’est pas en cours d’exécution, vous devez inscrire le moniker de l’objet à l’aide de la première clé inutilisée de la liste : « ExceededDeadline », « ExceededDeadline1 », « ExceededDeadline2 », etc. Si l’appelant trouve ultérieurement le moniker dans la table d’objets en cours d’exécution, l’appelant peut réessayer l’opération de liaison.
- MK_E_CONNECTMANUALLY : la clé « ConnectManually » indique un moniker dont la liaison nécessite l’aide de l’utilisateur final. Pour demander à l’utilisateur final de se connecter manuellement à l’objet, l’appelant peut réessayer l’opération de liaison après avoir affiché le nom d’affichage du moniker. Les raisons courantes de cette erreur sont qu’un mot de passe est nécessaire ou qu’une disquette doit être montée.
- E_CLASSNOTFOUND : la clé « ClassNotFound » indique un moniker dont la classe est introuvable. (Impossible de localiser le serveur de l’objet identifié par ce moniker.) Si cette clé est utilisée pour un objet de document composé OLE, l’appelant peut utiliser IMoniker ::BindToStorage pour lier à l’objet, puis essayer d’effectuer une opération Traiter en tant que... ou Convertir en... pour associer l’objet à un autre serveur. Si cette opération réussit, l’appelant peut réessayer l’opération de liaison.
Vous pouvez définir de nouvelles chaînes en tant que clés pour le stockage des pointeurs. Par convention, vous devez utiliser des noms de clés qui commencent par la forme de chaîne du CLSID de la classe moniker. (Voir la fonction StringFromCLSID .)
Si le paramètre pszKey correspond au nom d’une clé existante dans la table du contexte de liaison, le nouvel objet remplace l’objet existant dans la table.
Lorsque vous inscrivez un objet à l’aide de cette méthode, l’objet n’est pas libéré tant que l’un des éléments suivants ne se produit pas :
- Il est remplacé dans la table par un autre objet avec la même clé.
- Il est supprimé de la table par un appel à IBindCtx ::RevokeObjectParam.
- Le contexte de liaison est libéré. Tous les objets inscrits sont libérés lorsque le contexte de liaison est libéré.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
En-tête | objidl.h |