Funzione CoReleaseMarshalData (combaseapi.h)

Elimina un pacchetto di dati con marshalling precedentemente.

Sintassi

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

Parametri

[in] pStm

Puntatore al flusso contenente il pacchetto di dati da eliminare. Vedere IStream.

Valore restituito

Questa funzione può restituire i valori restituiti standard E_FAIL, E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
Il pacchetto di dati è stato eliminato correttamente.
STG_E_INVALIDPOINTER
Errore correlato al parametro pStm .
CO_E_NOTINITIALIZED
La funzione CoInitialize o OleInitialize non è stata chiamata nel thread corrente prima che questa funzione sia stata chiamata.

Commenti

Importante  

Nota sulla sicurezza: la chiamata a questo metodo con dati non attendibili è un rischio di sicurezza. Chiamare questo metodo solo con dati attendibili.

 
La funzione CoReleaseMarshalData esegue le attività seguenti:
  1. La funzione legge un CLSID dal flusso.
  2. Se viene usata l'implementazione predefinita del marshalling COM, la funzione ottiene un puntatore IMarshal a un'istanza del nonmarshaler standard. Se viene usato il marshalling personalizzato, la funzione crea un proxy chiamando la funzione CoCreateInstance , passando il CLSID letto dal flusso e richiede un puntatore dell'interfaccia IMarshal al proxy appena creato.
  3. Usando il puntatore dell'interfaccia IMarshal acquisito, la funzione chiama IMarshal::ReleaseMarshalData.
In genere non si chiama questa funzione. L'unica situazione in cui potrebbe essere necessario chiamare questa funzione è se si usa il marshalling personalizzato (scrivere e usare la propria implementazione di IMarshal). Esempi di quando è necessario chiamare CoReleaseMarshalData includono le situazioni seguenti:
  • È stato effettuato un tentativo di annullare il pacchetto di dati, ma non è riuscito.
  • Un pacchetto di dati con marshalling è stato rimosso da una tabella globale.
Come analogia, il pacchetto di dati può essere considerato come riferimento all'oggetto originale, proprio come se fosse un altro puntatore di interfaccia tenuto sull'oggetto. Come un puntatore di interfaccia reale, tale pacchetto di dati deve essere rilasciato a un certo punto. L'uso di IMarshal::ReleaseMarshalData per rilasciare pacchetti di dati è analogo all'uso dei puntatori di interfaccia IUnknown ::Release.

Si noti che non è necessario chiamare CoReleaseMarshalData dopo una chiamata riuscita della funzione CoUnmarshalInterface ; tale funzione rilascia i dati di marshalling come parte dell'elaborazione che esegue.

Importante È necessario chiamare la funzione CoReleaseMarshalData nello stesso appartamento che ha chiamato CoMarshalInterface per eseguire il marshalling dell'oggetto nel flusso. Questa operazione potrebbe causare la perdita del riferimento all'oggetto mantenuto dal pacchetto marshalling nel flusso.
 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione combaseapi.h (include Objbase.h)
Libreria Ole32.lib
DLL Ole32.dll

Vedi anche

IMarshal::ReleaseMarshalData