Share via


Funzione CoGetStandardMarshal (combaseapi.h)

Crea un oggetto di marshalling predefinito, o standard, nel processo client o nel processo server, a seconda del chiamante e restituisce un puntatore all'implementazione IMarshal dell'oggetto.

Sintassi

HRESULT CoGetStandardMarshal(
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags,
  [out]          LPMARSHAL *ppMarshal
);

Parametri

[in] riid

Riferimento all'identificatore dell'interfaccia il cui puntatore deve essere sottoposto a marshalling. Questa interfaccia deve essere derivata dall'interfaccia IUnknown .

[in] pUnk

Puntatore all'interfaccia di cui eseguire il marshalling.

[in] dwDestContext

Contesto di destinazione in cui l'interfaccia specificata deve essere annullata. I valori provengono dall'enumerazione MSHCTX. Unmarshaling può verificarsi in un altro apartment del processo corrente (MSHCTX_INPROC) o in un altro processo nello stesso computer del processo corrente (MSHCTX_LOCAL).

[in, optional] pvDestContext

Questo parametro è riservato e deve essere NULL.

[in] mshlflags

Indica se i dati da sottoporre a marshalling devono essere trasmessi al processo client (caso normale) o scritti in una tabella globale in cui è possibile recuperarlo da più client. I valori provengono dall'enumerazione MSHLFLAGS .

[out] ppMarshal

Indirizzo della variabile puntatore IMarshal* che riceve il puntatore dell'interfaccia al gestore di marshalling standard.

Valore restituito

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

Codice restituito Descrizione
S_OK
L'istanza di IMarshal è stata restituita correttamente.
CO_E_NOTINITIALIZED
Prima di poter chiamare questa funzione, è necessario chiamare la funzione CoInitialize o OleInitialize nel thread corrente.

Commenti

La funzione CoGetStandardMarshal crea un oggetto di marshalling predefinito, o standard, nel processo client o nel processo server, come potrebbe essere necessario e restituisce il puntatore IMarshal dell'oggetto al chiamante. Se si implementa IMarshal, è possibile che l'implementazione chiami CoGetStandardMarshal come modo per delegare all'implementazione predefinita di COM qualsiasi contesto di destinazione che non si capisce completamente o si vuole gestire. In caso contrario, è possibile ignorare questa funzione, che com chiama come parte delle procedure di marshalling interne.

Quando la libreria COM nel processo client riceve un puntatore di interfaccia di cui è stato eseguito il marshalling, cerca un CLSID da usare per la creazione di un proxy ai fini dell'annullamento delmarshaling del pacchetto. Se il pacchetto non contiene un CLSID per il proxy, COM chiama CoGetStandardMarshal, passando un valore pUnkNULL. Questa funzione crea un proxy standard nel processo client e restituisce un puntatore all'implementazione del proxy di IMarshal. COM usa questo puntatore per chiamare CoUnmarshalInterface per recuperare il puntatore all'interfaccia richiesta.

Se l'implementazione dell'applicazione server OLE di IMarshal chiama CoGetStandardMarshal, è necessario passare sia l'IID di (riid) che un puntatore a (pUnk), l'interfaccia richiesta.

Questa funzione esegue le attività seguenti:

  1. Determina se pUnk è NULL.
  2. Se pUnk è NULL, crea un proxy di interfaccia standard nel processo client per il riid specificato e restituisce il puntatore IMarshal del proxy.
  3. Se pUnk non è NULL, verifica se esiste già un gestore di marshalling per l'oggetto, ne crea uno nuovo, se necessario e restituisce il puntatore IMarshal del gestore di marshalling.

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