Funzione CoGetMarshalSizeMax (combaseapi.h)

Restituisce un limite superiore sul numero di byte necessari per effettuare il marshalling del puntatore di interfaccia specificato all'oggetto specificato.

Sintassi

HRESULT CoGetMarshalSizeMax(
  [out]          ULONG     *pulSize,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Parametri

[out] pulSize

Puntatore al valore associato superiore per le dimensioni, in byte, del pacchetto di dati da scrivere nel flusso di marshalling. Se questo parametro è 0, la dimensione del pacchetto è sconosciuta.

[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. Questa interfaccia deve essere derivata dall'interfaccia IUnknown .

[in] dwDestContext

Contesto di destinazione in cui l'interfaccia specificata deve essere annullata. I valori per dwDestContext provengono dall'enumerazione MSHCTX.

[in, optional] pvDestContext

Questo parametro è riservato e deve essere NULL.

[in] mshlflags

Indica se i dati di cui eseguire il marshalling devono essere trasmessi al client elaborano il caso normale o vengono scritti in una tabella globale, in cui possono essere recuperati da più client. I valori provengono dall'enumerazione MSHLFLAGS.

Valore restituito

Questa funzione può restituire il valore restituito standard E_UNEXPECTED, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
Il limite superiore è stato restituito correttamente.
CO_E_NOTINITIALIZED
Prima di poter chiamare questa funzione, è necessario chiamare la funzione CoInitialize o OleInitialize .

Commenti

Questa funzione esegue le attività seguenti:

  1. Esegue una query sull'oggetto per un puntatore IMarshal o, se l'oggetto non implementa IMarshal, ottiene un puntatore al gestore di marshalling standard COM.
  2. Usando il puntatore ottenuto nell'elemento precedente, chiama IMarshal::GetMarshalSizeMax.
  3. Aggiunge al valore restituito dalla chiamata a GetMarshalSizeMax la dimensione dell'intestazione dei dati di marshalling e, possibilmente, quella del CLSID proxy per ottenere le dimensioni massime in byte della quantità di dati da scrivere nel flusso di marshalling.
Questa funzione non viene chiamata in modo esplicito, a meno che non si implementi IMarshal, nel qual caso lo stub di marshalling deve chiamare questa funzione per ottenere le dimensioni corrette del pacchetto di dati di cui eseguire il marshalling.

Il valore restituito da questo metodo è garantito che sia valido solo se lo stato interno dell'oggetto sottoposto a marshalling non cambia. Pertanto, il marshalling effettivo deve essere eseguito immediatamente dopo la restituzione di questa funzione oppure lo stub rischia che l'oggetto, a causa di una modifica dello stato, richieda più memoria di quanto indicato in origine.

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::GetMarshalSizeMax