Freigeben über


CoReleaseMarshalData-Funktion (combaseapi.h)

Zerstört ein zuvor gemarschtes Datenpaket.

Syntax

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

Parameter

[in] pStm

Ein Zeiger auf den Stream, der das zu zerstörende Datenpaket enthält. Siehe IStream.

Rückgabewert

Diese Funktion kann die Standardrückgabewerte E_FAIL, E_INVALIDARG, E_OUTOFMEMORY und E_UNEXPECTED sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Das Datenpaket wurde erfolgreich zerstört.
STG_E_INVALIDPOINTER
Ein Fehler im Zusammenhang mit dem pStm-Parameter .
CO_E_NOTINITIALIZED
Die CoInitialize - oder OleInitialize-Funktion wurde im aktuellen Thread nicht aufgerufen, bevor diese Funktion aufgerufen 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 Funktion CoReleaseMarshalData führt die folgenden Aufgaben aus:
  1. Die Funktion liest eine CLSID aus dem Stream.
  2. Wenn die standardmäßige Marshallimplementierung von COM verwendet wird, erhält die Funktion einen IMarshal-Zeiger auf eine instance des Standard-Entmarsshalers. Wenn benutzerdefiniertes Marshalling verwendet wird, erstellt die Funktion einen Proxy, indem sie die CoCreateInstance-Funktion aufruft , die CLSID übergibt, die sie aus dem Stream gelesen hat, und fordert einen IMarshal-Schnittstellenzeiger auf den neu erstellten Proxy an.
  3. Mit dem erworbenen IMarshal-Schnittstellenzeiger ruft die Funktion IMarshal::ReleaseMarshalData auf.
In der Regel rufen Sie diese Funktion nicht auf. Die einzige Situation, in der Sie diese Funktion möglicherweise aufrufen müssen, ist, wenn Sie benutzerdefiniertes Marshalling verwenden (Schreiben und Verwenden Ihrer eigenen Implementierung von IMarshal). Beispiele für den Aufruf von CoReleaseMarshalData sind die folgenden Situationen:
  • Es wurde versucht, das Datenpaket wieder zu entmarsen, aber es ist fehlgeschlagen.
  • Ein gemarseltes Datenpaket wurde aus einer globalen Tabelle entfernt.
Als Analogie kann das Datenpaket als Verweis auf das ursprüngliche Objekt betrachtet werden, als wäre es ein weiterer Schnittstellenzeiger, der auf das Objekt gehalten wird. Wie ein echter Schnittstellenzeiger muss dieses Datenpaket irgendwann freigegeben werden. Die Verwendung von IMarshal::ReleaseMarshalData zum Freigeben von Datenpaketen entspricht der Verwendung von IUnknown::Release zum Freigeben von Schnittstellenzeigern.

Beachten Sie, dass Sie CoReleaseMarshalData nach einem erfolgreichen Aufruf der Funktion CoUnmarshalInterface nicht aufrufen müssen. diese Funktion gibt die Marshalldaten im Rahmen der Verarbeitung frei.

Wichtig Sie müssen die Funktion CoReleaseMarshalData in demselben Apartment aufrufen, das CoMarshalInterface aufgerufen hat, um das Objekt in den Stream zu marshallen. Dies kann dazu führen, dass der Objektverweis, der vom gemarsten Paket im Stream gespeichert wird, durchleckt wird.
 

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

IMarshal::ReleaseMarshalData