Partager via


CoUnmarshalInterface, fonction (combaseapi.h)

Initialise un proxy nouvellement créé à l’aide de données écrites dans le flux par un appel précédent à la fonction CoMarshalInterface et retourne un pointeur d’interface vers ce proxy.

Syntaxe

HRESULT CoUnmarshalInterface(
  [in]  LPSTREAM pStm,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Paramètres

[in] pStm

Pointeur vers le flux à partir duquel l’interface doit être démarshalée.

[in] riid

Référence à l’identificateur de l’interface à démarshaler. Par IID_NULL, l’interface retournée est celle définie par le flux, objref.iid.

[out] ppv

Adresse de la variable pointeur qui reçoit le pointeur d’interface demandé dans riid. Une fois le retour réussi, *ppv contient le pointeur d’interface demandé pour l’interface non délimitée.

Valeur retournée

Cette fonction peut retourner la valeur de retour standard E_FAIL, les erreurs retournées par CoCreateInstance et les valeurs suivantes.

Code de retour Description
S_OK
Le pointeur d’interface a été correctement démarshalé.
STG_E_INVALIDPOINTER
pStm est un pointeur non valide.
CO_E_NOTINITIALIZED
La fonction CoInitialize ou OleInitialize n’a pas été appelée sur le thread actuel avant l’appel de cette fonction.
CO_E_OBJNOTCONNECTED
L’application objet a été déconnectée du système de communication à distance (par exemple, à la suite d’un appel à la fonction CoDisconnectObject ).
REGDB_E_CLASSNOTREG
Une erreur s’est produite lors de la lecture de la base de données d’inscription.
E_NOINTERFACE
RequêteInterface finale de cette fonction pour l’interface demandée retournée E_NOINTERFACE.

Remarques

Important  

Remarque de sécurité : l’appel de cette méthode avec des données non approuvées est un risque de sécurité. Appelez cette méthode avec des données approuvées uniquement.

 
La fonction CoUnmarshalInterface effectue les tâches suivantes :
  1. Lit à partir du flux le CLSID à utiliser pour créer une instance du proxy.
  2. Obtient un pointeur IMarshal vers le proxy qui doit effectuer le démarshaling. Si l’objet utilise l’implémentation de marshaling par défaut de COM, le pointeur ainsi obtenu est vers une instance de l’objet proxy générique. Si le marshaling se produit entre deux threads dans le même processus, le pointeur est vers un instance du marshaleur thread libre in-process. Si l’objet fournit son propre code de marshaling, CoUnmarshalInterface appelle la fonction CoCreateInstance , en passant le CLSID qu’il a lu à partir du flux de marshaling. CoCreateInstance crée une instance du proxy de l’objet et retourne un pointeur d’interface IMarshal vers le proxy.
  3. À l’aide du pointeur d’interface IMarshal qu’elle a acquis, la fonction appelle ensuite IMarshal ::UnmarshalInterface et, le cas échéant, IMarshal ::ReleaseMarshalData.
L’appelant principal de cette fonction est COM lui-même, à partir des proxys d’interface ou des stubs qui démarshalent un pointeur d’interface. Toutefois, il existe certaines situations dans lesquelles vous pouvez appeler CoUnmarshalInterface. Par exemple, si vous implémentez un stub, votre implémentation appelle CoUnmarshalInterface lorsque le stub reçoit un pointeur d’interface en tant que paramètre dans un appel de méthode.

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 combaseapi.h (inclure Objbase.h)
Bibliothèque Ole32.lib
DLL Ole32.dll

Voir aussi

CoMarshalInterface

IMarshal ::UnmarshalInterface