Freigeben über


CoMarshalInterface-Funktion (combaseapi.h)

Schreibt die Daten in einen Stream, die zum Initialisieren eines Proxyobjekts in einem Clientprozess erforderlich sind.

Syntax

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

Parameter

[in] pStm

Ein Zeiger auf den Stream, der während des Marshallings verwendet werden soll. Weitere Informationen finden Sie unter IStream.

[in] riid

Ein Verweis auf den Bezeichner der schnittstelle, die gemarshallt werden soll. Diese Schnittstelle muss von der IUnknown-Schnittstelle abgeleitet werden.

[in] pUnk

Ein Zeiger auf die zu marshallende Schnittstelle. Diese Schnittstelle muss von der IUnknown-Schnittstelle abgeleitet werden.

[in] dwDestContext

Der Zielkontext, in dem die angegebene Schnittstelle entmarshaliert werden soll. Die möglichen Werte stammen aus der Enumeration MSHCTX. Derzeit kann die Entkopplung in einer anderen Wohnung des aktuellen Prozesses (MSHCTX_INPROC), in einem anderen Prozess auf demselben Computer wie der aktuelle Prozess (MSHCTX_LOCAL) oder in einem Prozess auf einem anderen Computer (MSHCTX_DIFFERENTMACHINE) auftreten.

[in, optional] pvDestContext

Dieser Parameter ist reserviert und muss NULL sein.

[in] mshlflags

Die Flags, die angeben, ob die zu marshallende Daten zurück an den Clientprozess (typischer Fall) übertragen oder in eine globale Tabelle geschrieben werden sollen, wo sie von mehreren Clients abgerufen werden können. Die möglichen Werte stammen aus der MSHLFLAGS-Enumeration .

Rückgabewert

Diese Funktion kann die standardmäßigen Rückgabewerte E_FAIL, E_OUTOFMEMORY und E_UNEXPECTED, die von IStream zurückgegebenen Datenstromzugriffsfehlerwerte sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Das HRESULT wurde erfolgreich gemarshallt.
CO_E_NOTINITIALIZED
Die CoInitialize - oder OleInitialize-Funktion wurde nicht im aktuellen Thread aufgerufen, bevor diese Funktion aufgerufen wurde.

Hinweise

Die CoMarshalInterface-Funktion marshallt die Schnittstelle, auf die riid für das Objekt verweist, auf dessen IUnknown-Implementierung von pUnk verwiesen wird. Dazu führt die CoMarshalInterface-Funktion die folgenden Aufgaben aus:

  1. Fragt das -Objekt nach einem Zeiger auf die IMarshal-Schnittstelle ab. Wenn das -Objekt IMarshal nicht implementiert, d. h., es basiert auf COM, um Marshallingunterstützung bereitzustellen, erhält CoMarshalInterface einen Zeiger auf die Standardimplementierung von IMarshal in COM.
  2. Ruft die CLSID des Proxys des Objekts ab, indem IMarshal::GetUnmarshalClass aufgerufen wird, wobei der zurückgegebene IMarshal-Schnittstellenzeiger verwendet wird.
  3. Schreibt die CLSID des Proxys in den Stream, der für das Marshalling verwendet werden soll.
  4. Marshallt den Schnittstellenzeiger durch Aufrufen von IMarshal::MarshalInterface.
Die COM-Bibliothek im Clientprozess ruft die CoUnmarshalInterface-Funktion auf, um die Daten zu extrahieren und den Proxy zu initialisieren. Suchen Sie vor dem Aufrufen von CoUnmarshalInterface zurück zur ursprünglichen Position im Stream.

Wenn Sie vorhandene COM-Schnittstellen implementieren oder Eigene Schnittstellen mithilfe der Microsoft Interface Definition Language (MIDL) definieren, rufen die von MIDL generierten Proxys und Stubs CoMarshalInterface für Sie auf. Wenn Sie Ihre eigenen Proxys und Stubs schreiben, sollten Ihr Proxy- und Stubcode jeweils CoMarshalInterface aufrufen, um Schnittstellenzeiger ordnungsgemäß zu marshallen. Der Direkte Aufruf von IMarshal über Ihren Proxy- und Stubcode wird nicht empfohlen.

Wenn Sie Ihre eigene Implementierung von IMarshal schreiben und Ihr Proxy Zugriff auf ein privates Objekt benötigt, können Sie einen Schnittstellenzeiger auf dieses Objekt als Teil der Daten einschließen, die Sie in den Stream schreiben. Wenn Sie in solchen Situationen beim Übergeben des Schnittstellenzeigers die standardmäßige Marshallingimplementierung von COM verwenden möchten, können Sie dazu CoMarshalInterface für das -Objekt aufrufen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile combaseapi.h (include Objbase.h)
Bibliothek Ole32.lib
DLL Ole32.dll

Weitere Informationen

CoUnmarshalInterface

IMarshal::MarshalInterface