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 |
---|---|
|
HrESULT è stato eseguito correttamente il marshalling. |
|
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:
- 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.
- Ottiene il CLSID del proxy dell'oggetto chiamando IMarshal::GetUnmarshalClass, usando il puntatore dell'interfaccia IMarshal restituito.
- Scrive il CLSID del proxy nel flusso da usare per il marshalling.
- Esegue il marshalling del puntatore dell'interfaccia chiamando IMarshal::MarshalInterface.
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 |