Condividi tramite


Funzione CoUnmarshalInterface (combaseapi.h)

Inizializza un proxy appena creato usando i dati scritti nel flusso da una chiamata precedente alla funzione CoMarshalInterface e restituisce un puntatore di interfaccia a tale proxy.

Sintassi

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

Parametri

[in] pStm

Puntatore al flusso da cui l'interfaccia deve essere annullata.

[in] riid

Riferimento all'identificatore dell'interfaccia da annullare. Per IID_NULL, l'interfaccia restituita è quella definita dal flusso, objref.iid.

[out] ppv

Indirizzo della variabile del puntatore che riceve il puntatore di interfaccia richiesto in riid. Al termine della restituzione, *ppv contiene il puntatore di interfaccia richiesto per l'interfaccia nonmarshaled.

Valore restituito

Questa funzione può restituire il valore restituito standard E_FAIL, gli errori restituiti da CoCreateInstance e i valori seguenti.

Codice restituito Descrizione
S_OK
Il puntatore all'interfaccia è stato scollegato correttamente.
STG_E_INVALIDPOINTER
pStm è un puntatore non valido.
CO_E_NOTINITIALIZED
La funzione CoInitialize o OleInitialize non è stata chiamata nel thread corrente prima della chiamata di questa funzione.
CO_E_OBJNOTCONNECTED
L'applicazione oggetto è stata disconnessa dal sistema di comunicazione remota, ad esempio in seguito a una chiamata alla funzione CoDisconnectObject .
REGDB_E_CLASSNOTREG
Errore durante la lettura del database di registrazione.
E_NOINTERFACE
QueryInterface finale di questa funzione per l'interfaccia richiesta restituita E_NOINTERFACE.

Commenti

Importante  

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

 
La funzione CoUnmarshalInterface esegue le attività seguenti:
  1. Legge dal flusso il CLSID da usare per creare un'istanza del proxy.
  2. Ottiene un puntatore IMarshal al proxy che deve eseguire l'annullamento delmarshaling. Se l'oggetto utilizza l'implementazione predefinita del marshalling COM, il puntatore ottenuto è quindi un'istanza dell'oggetto proxy generico. Se il marshalling si verifica tra due thread nello stesso processo, il puntatore è a un'istanza del gestore di marshalling senza thread in-process. Se l'oggetto fornisce il proprio codice di marshalling, CoUnmarshalInterface chiama la funzione CoCreateInstance , passando il CLSID letto dal flusso di marshalling. CoCreateInstance crea un'istanza del proxy dell'oggetto e restituisce un puntatore all'interfaccia IMarshal al proxy.
  3. Usando il puntatore di interfaccia IMarshal acquisito, la funzione chiama quindi IMarshal::UnmarshalInterface e, se appropriato, IMarshal::ReleaseMarshalData.
Il chiamante primario di questa funzione è COM stesso, da proxy di interfaccia o stub che annullano ilmarso di un puntatore di interfaccia. Esistono tuttavia alcune situazioni in cui è possibile chiamare CoUnmarshalInterface. Ad esempio, se si implementa uno stub, l'implementazione chiamerebbe CoUnmarshalInterface quando lo stub riceve un puntatore di interfaccia come parametro in una chiamata al metodo.

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

CoMarshalInterface

IMarshal::UnmarshalInterface