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 |
---|---|
|
Das HRESULT wurde erfolgreich gemarshallt. |
|
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:
- 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.
- Ruft die CLSID des Proxys des Objekts ab, indem IMarshal::GetUnmarshalClass aufgerufen wird, wobei der zurückgegebene IMarshal-Schnittstellenzeiger verwendet wird.
- Schreibt die CLSID des Proxys in den Stream, der für das Marshalling verwendet werden soll.
- Marshallt den Schnittstellenzeiger durch Aufrufen von IMarshal::MarshalInterface.
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 |