Condividi tramite


Funzione CoMarshalInterface (combaseapi.h)

Scrive in un flusso i dati necessari per inizializzare un oggetto proxy in un processo client.

Sintassi

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Parametri

[in] pStm

Puntatore al flusso da usare durante il marshalling. Vedere IStream.

[in] riid

Riferimento all'identificatore dell'interfaccia da eseguire per il marshalling. Questa interfaccia deve essere derivata dall'interfaccia IUnknown .

[in] pUnk

Puntatore all'interfaccia da eseguire il marshalling. Questa interfaccia deve essere derivata dall'interfaccia IUnknown .

[in] dwDestContext

Contesto di destinazione in cui l'interfaccia specificata deve essere annullata. I valori possibili provengono dall'enumerazione MSHCTX. Attualmente, unmarshaling può verificarsi in un altro appartamento del processo corrente (MSHCTX_INPROC), in un altro processo nello stesso computer del processo corrente (MSHCTX_LOCAL) o in un processo in un computer diverso (MSHCTX_DIFFERENTMACHINE).

[in, optional] pvDestContext

Questo parametro è riservato e deve essere NULL.

[in] mshlflags

I flag che specificano se i dati da eseguire per il marshalling devono essere trasmessi al processo client (il caso tipico) o scritti in una tabella globale, in cui può essere recuperato da più client. I valori possibili provengono dall'enumerazione MSHLFLAGS .

Valore restituito

Questa funzione può restituire i valori restituiti standard E_FAIL, E_OUTOFMEMORY e E_UNEXPECTED, i valori di errore di accesso al flusso restituiti da IStream e i valori seguenti.

Codice restituito Descrizione
S_OK
HrESULT è stato eseguito correttamente il marshalling.
CO_E_NOTINITIALIZED
La funzione CoInitialize o OleInitialize non è stata chiamata nel thread corrente prima che questa funzione sia stata chiamata.

Commenti

La funzione CoMarshalInterface esegue il marshalling dell'interfaccia a cui fa riferimento riid nell'oggetto la cui implementazione IUnknown è puntata da pUnk. A tale scopo, la funzione CoMarshalInterface esegue le attività seguenti:

  1. Esegue una query sull'oggetto per un puntatore all'interfaccia IMarshal . Se l'oggetto non implementa IMarshal, ovvero si basa su COM per fornire supporto di marshalling, CoMarshalInterface ottiene un puntatore all'implementazione predefinita di IMarshal.
  2. Ottiene il CLSID del proxy dell'oggetto chiamando IMarshal::GetUnmarshalClass, usando il puntatore dell'interfaccia IMarshal restituito.
  3. Scrive il CLSID del proxy nel flusso da usare per il marshalling.
  4. Esegue il marshalling del puntatore dell'interfaccia chiamando IMarshal::MarshalInterface.
La libreria COM nel processo client chiama la funzione CoUnmarshalInterface per estrarre i dati e inizializzare il proxy. Prima di chiamare CoUnmarshalInterface, cercare di tornare alla posizione originale nel flusso.

Se si implementano interfacce COM esistenti o si definiscono le proprie interfacce usando Microsoft Interface Definition Language (MIDL), i proxy generati da MIDL e gli stub chiamano CoMarshalInterface . Se si scrivono proxy e stub, il codice proxy e il codice stub devono ogni chiamata a CoMarshalInterface per eseguire correttamente il marshalling dei puntatori dell'interfaccia. Non è consigliabile chiamare IMarshal direttamente dal proxy e dal codice stub.

Se si scrive la propria implementazione di IMarshal e il proxy deve accedere a un oggetto privato, è possibile includere un puntatore dell'interfaccia a tale oggetto come parte dei dati scritti nel flusso. In tali situazioni, se si vuole usare l'implementazione predefinita del marshalling COM quando si passa il puntatore dell'interfaccia, è possibile chiamare CoMarshalInterface nell'oggetto a tale scopo.

Requisiti

   
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

CoUnmarshalInterface

IMarshal::MarshalInterface