Partager via


Fonction CoMarshalInterface (combaseapi.h)

Écrit dans un flux les données requises pour initialiser un objet proxy dans un processus client.

Syntaxe

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Paramètres

[in] pStm

Pointeur vers le flux à utiliser pendant le marshaling. Voir IStream.

[in] riid

Référence à l’identificateur de l’interface à marshaler. Cette interface doit être dérivée de l’interface IUnknown .

[in] pUnk

Pointeur vers l’interface à marshaler. Cette interface doit être dérivée de l’interface IUnknown .

[in] dwDestContext

Contexte de destination dans lequel l’interface spécifiée doit être démarshalée. Les valeurs possibles proviennent de l’énumération MSHCTX. Actuellement, le démarshalage peut se produire dans un autre appartement du processus en cours (MSHCTX_INPROC), dans un autre processus sur le même ordinateur que le processus en cours (MSHCTX_LOCAL) ou dans un processus sur un autre ordinateur (MSHCTX_DIFFERENTMACHINE).

[in, optional] pvDestContext

Ce paramètre est réservé et doit avoir la valeur NULL.

[in] mshlflags

Indicateurs qui spécifient si les données à marshaler doivent être transmises au processus client (cas typique) ou écrites dans une table globale, où elles peuvent être récupérées par plusieurs clients. Les valeurs possibles proviennent de l’énumération MSHLFLAGS .

Valeur retournée

Cette fonction peut retourner les valeurs de retour standard E_FAIL, E_OUTOFMEMORY et E_UNEXPECTED, les valeurs d’erreur d’accès au flux retournées par IStream, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
Le HRESULT a été correctement marshalé.
CO_E_NOTINITIALIZED
La fonction CoInitialize ou OleInitialize n’a pas été appelée sur le thread actuel avant l’appel de cette fonction.

Remarques

La fonction CoMarshalInterface marshale l’interface référencée par riid sur l’objet dont l’implémentation IUnknown est pointée par pUnk. Pour ce faire, la fonction CoMarshalInterface effectue les tâches suivantes :

  1. Interroge l’objet pour un pointeur vers l’interface IMarshal . Si l’objet n’implémente pas IMarshal, ce qui signifie qu’il s’appuie sur COM pour fournir la prise en charge du marshaling, CoMarshalInterface obtient un pointeur vers l’implémentation par défaut d’IMarshal de COM.
  2. Obtient le CLSID du proxy de l’objet en appelant IMarshal::GetUnmarshalClass, à l’aide du pointeur d’interface IMarshal qui a été retourné.
  3. Écrit le CLSID du proxy dans le flux à utiliser pour le marshaling.
  4. Marshale le pointeur d’interface en appelant IMarshal::MarshalInterface.
La bibliothèque COM dans le processus client appelle la fonction CoUnmarshalInterface pour extraire les données et initialiser le proxy. Avant d’appeler CoUnmarshalInterface, revenez à la position d’origine dans le flux.

Si vous implémentez des interfaces COM existantes ou définissez vos propres interfaces à l’aide du langage MIDL (Microsoft Interface Definition Language), les proxys et les stubs générés par MIDL appellent CoMarshalInterface pour vous. Si vous écrivez vos propres proxys et stubs, votre code proxy et votre code stub doivent chacun appeler CoMarshalInterface pour marshaler correctement les pointeurs d’interface. Il n’est pas recommandé d’appeler IMarshal directement à partir de votre proxy et du code stub.

Si vous écrivez votre propre implémentation d’IMarshal et que votre proxy a besoin d’accéder à un objet privé, vous pouvez inclure un pointeur d’interface vers cet objet dans le cadre des données que vous écrivez dans le flux. Dans de telles situations, si vous souhaitez utiliser l’implémentation de marshaling par défaut de COM lors du passage du pointeur d’interface, vous pouvez appeler CoMarshalInterface sur l’objet pour ce faire.

Configuration requise

   
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

CoUnmarshalInterface

IMarshal::MarshalInterface