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 |
---|---|
|
Le HRESULT a été correctement marshalé. |
|
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 :
- 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.
- Obtient le CLSID du proxy de l’objet en appelant IMarshal::GetUnmarshalClass, à l’aide du pointeur d’interface IMarshal qui a été retourné.
- Écrit le CLSID du proxy dans le flux à utiliser pour le marshaling.
- Marshale le pointeur d’interface en appelant IMarshal::MarshalInterface.
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 |