CoReleaseMarshalData, fonction (combaseapi.h)

Détruit un paquet de données précédemment marshalé.

Syntaxe

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

Paramètres

[in] pStm

Pointeur vers le flux qui contient le paquet de données à détruire. Voir IStream.

Valeur retournée

Cette fonction peut retourner les valeurs de retour standard E_FAIL, E_INVALIDARG, E_OUTOFMEMORY et E_UNEXPECTED, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
Le paquet de données a été détruit avec succès.
STG_E_INVALIDPOINTER
Erreur liée au paramètre pStm .
CO_E_NOTINITIALIZED
La fonction CoInitialize ou OleInitialize n’a pas été appelée sur le thread actuel avant l’appel de cette fonction.

Remarques

Important  

Remarque de sécurité : l’appel de cette méthode avec des données non approuvées est un risque de sécurité. Appelez cette méthode avec des données approuvées uniquement.

 
La fonction CoReleaseMarshalData effectue les tâches suivantes :
  1. La fonction lit un CLSID à partir du flux.
  2. Si l’implémentation de marshaling par défaut de COM est utilisée, la fonction obtient un pointeur IMarshal vers un instance du unmarshaler standard. Si le marshaling personnalisé est utilisé, la fonction crée un proxy en appelant la fonction CoCreateInstance, en transmettant le CLSID qu’elle a lu à partir du flux et en demandant un pointeur d’interface IMarshal vers le proxy nouvellement créé.
  3. À l’aide du pointeur d’interface IMarshal qu’elle a acquis, la fonction appelle IMarshal ::ReleaseMarshalData.
En règle générale, vous n’appelez pas cette fonction. La seule situation dans laquelle vous devrez peut-être appeler cette fonction est si vous utilisez le marshaling personnalisé (écrire et utiliser votre propre implémentation d’IMarshal). Voici des exemples de cas où CoReleaseMarshalData doit être appelé :
  • Une tentative de démarshaler le paquet de données a été effectuée, mais elle a échoué.
  • Un paquet de données marshalé a été supprimé d’une table globale.
Par analogie, le paquet de données peut être considéré comme une référence à l’objet d’origine, comme s’il s’agissait d’un autre pointeur d’interface détenu sur l’objet. Comme un pointeur d’interface réel, ce paquet de données doit être libéré à un moment donné. L’utilisation de IMarshal ::ReleaseMarshalData pour libérer des paquets de données est analogue à l’utilisation de IUnknown ::Release pour libérer des pointeurs d’interface.

Notez que vous n’avez pas besoin d’appeler CoReleaseMarshalData après un appel réussi de la fonction CoUnmarshalInterface ; cette fonction libère les données marshal dans le cadre du traitement qu’elle effectue.

Important Vous devez appeler la fonction CoReleaseMarshalData dans le même appartement que CoMarshalInterface pour marshaler l’objet dans le flux. Si vous ne procédez pas ainsi, la référence d’objet détenue par le paquet marshalé dans le flux peut être divulguée.
 

Configuration requise

Condition requise Valeur
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

Voir aussi

IMarshal ::ReleaseMarshalData