Freigeben über


CoUnmarshalInterface-Funktion (combaseapi.h)

Initialisiert einen neu erstellten Proxy mithilfe von Daten, die von einem vorherigen Aufruf der CoMarshalInterface-Funktion in den Stream geschrieben wurden, und gibt einen Schnittstellenzeiger auf diesen Proxy zurück.

Syntax

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

Parameter

[in] pStm

Ein Zeiger auf den Datenstrom, von dem die Schnittstelle getrennt werden soll.

[in] riid

Ein Verweis auf den Bezeichner der zu entmarshalierten Schnittstelle. Bei IID_NULL ist die zurückgegebene Schnittstelle die vom Stream definierte Schnittstelle objref.iid.

[out] ppv

Die Adresse der Zeigervariable, die den in riid angeforderten Schnittstellenzeiger empfängt. Nach erfolgreicher Rückgabe enthält *ppv den angeforderten Schnittstellenzeiger für die nichtmarshalierte Schnittstelle.

Rückgabewert

Diese Funktion kann den Standardrückgabewert E_FAIL, von CoCreateInstance zurückgegebene Fehler und die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Der Schnittstellenzeiger wurde erfolgreich entmarshaliert.
STG_E_INVALIDPOINTER
pStm ist ein ungültiger Zeiger.
CO_E_NOTINITIALIZED
Die CoInitialize - oder OleInitialize-Funktion wurde nicht im aktuellen Thread aufgerufen, bevor diese Funktion aufgerufen wurde.
CO_E_OBJNOTCONNECTED
Die Objektanwendung wurde vom Remotingsystem getrennt (z. B. als Ergebnis eines Aufrufs der CoDisconnectObject-Funktion ).
REGDB_E_CLASSNOTREG
Fehler beim Lesen der Registrierungsdatenbank.
E_NOINTERFACE
Die endgültige QueryInterface dieser Funktion für die angeforderte Schnittstelle, die E_NOINTERFACE zurückgegeben wurde.

Hinweise

Wichtig  

Sicherheitshinweis: Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten ist ein Sicherheitsrisiko. Rufen Sie diese Methode nur mit vertrauenswürdigen Daten auf.

 
Die CoUnmarshalInterface-Funktion führt die folgenden Aufgaben aus:
  1. Liest die CLSID aus dem Stream, die zum Erstellen einer instance des Proxys verwendet werden soll.
  2. Ruft einen IMarshal-Zeiger auf den Proxy ab, der die Entmarsung durchführen soll. Wenn das Objekt die standardmäßige Marshallingimplementierung von COM verwendet, wird der Zeiger auf eine instance des generischen Proxyobjekts abgerufen. Wenn das Marshalling zwischen zwei Threads im selben Prozess erfolgt, ist der Zeiger auf eine instance des in-process free threaded marshaler. Wenn das Objekt einen eigenen Marshallingcode bereitstellt, ruft CoUnmarshalInterface die CoCreateInstance-Funktion auf und übergibt die CLSID, die es aus dem Marshallingdatenstrom liest. CoCreateInstance erstellt eine instance des Proxys des Objekts und gibt einen IMarshal-Schnittstellenzeiger auf den Proxy zurück.
  3. Mit dem erworbenen IMarshal-Schnittstellenzeiger ruft die Funktion dann IMarshal::UnmarshalInterface und ggf. IMarshal::ReleaseMarshalData auf.
Der primäre Aufrufer dieser Funktion ist COM selbst, aus Schnittstellenproxys oder Stubs, die einen Schnittstellenzeiger aufheben. Es gibt jedoch einige Situationen, in denen Sie CoUnmarshalInterface nennen können. Wenn Sie beispielsweise einen Stub implementieren, ruft Ihre Implementierung CoUnmarshalInterface auf, wenn der Stub einen Schnittstellenzeiger als Parameter in einem Methodenaufruf empfängt.

Anforderungen

Anforderung Wert
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

CoMarshalInterface

IMarshal::UnmarshalInterface