Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A função>_UserSize tipo<é uma função auxiliar para os atributos [ wire_marshal] e [ user_marshal]. Os stubs chamam essa função para dimensionar o buffer de dados RPC para o objeto de dados do usuário antes que os dados sejam empacotados no lado do cliente ou servidor. A função é definida como:
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
O tipo <> no nome da função significa o tipo userm, conforme especificado na [wire_marshal] ou [user_marshal] definição de tipo. Esse tipo pode ser intransmissível ou até mesmo — quando usado com o atributo [user_marshal] — desconhecido para o compilador MIDL. O nome do tipo de fio (o nome do tipo transmitido através da rede) não é usado no protótipo da função. Observe, no entanto, que o tipo de fio define o layout para os dados, conforme especificado pelo OSF DCE. Todos os dados devem ser convertidos para o formato de representação de dados de rede (NDR).
O parâmetro pFlags é um ponteiro para um campo de sinalizador de longo não assinado. A palavra superior do sinalizador contém sinalizadores de formato NDR, conforme definido pelo OSF DCE para representações de ponto flutuante, ordem de bytes e caracteres. A palavra inferior contém um sinalizador de contexto de empacotamento, conforme definido pelo canal COM. O layout exato das bandeiras dentro do campo é mostrado na tabela a seguir.
| Bits | Bandeira | Valor |
|---|---|---|
| 31-24 | Representação de vírgula flutuante | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
| 23-20 | Ordem de bytes inteiros e de ponto flutuante | 0 = Big-endian 1 = Little-endian |
| 19-16 | Representação de personagens | 0 = ASCII 1 = EBCDIC |
| 15-0 | Sinalizador de contexto de marshaling | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
O sinalizador de contexto de empacotamento torna possível alterar o comportamento da sua rotina dependendo do contexto para a chamada RPC. Por exemplo, se você tiver um identificador (longo) para um bloco de dados, você poderia enviar o identificador para uma chamada em processo, mas você enviaria os dados reais de uma chamada para uma máquina diferente. O sinalizador de contexto de empacotamento e seus valores são definidos nos arquivos Wtypes.h e Wtypes.idl no Platform Software Development Kit (SDK).
Observação
Quando o tipo de fio é definido corretamente, não é necessário usar os sinalizadores de formato NDR, pois o mecanismo de NDR executa as conversões necessárias.
O StartingSize um parâmetro é o deslocamento de buffer atual. O tamanho inicial indica o deslocamento do buffer para o objeto do usuário e ele pode ou não estar alinhado corretamente. A sua rotina deve ter em conta o preenchimento que for necessário.
O parâmetro pMyObj é um ponteiro para um objeto de tipo de usuário.
O valor de retorno é a nova posição de deslocamento ou buffer. A função deve retornar o tamanho cumulativo, que é o tamanho inicial mais o preenchimento possível mais o tamanho dos dados.
O tipo <função>_UserSize pode retornar uma superestimativa do tamanho necessário. O tamanho real do buffer enviado é definido pelo tamanho dos dados, não pelo tamanho da alocação do buffer.
O <tipo>_UserSize função não é chamado se o tamanho do fio pode ser calculado em tempo de compilação. Observe que, para a maioria das uniões, mesmo que não haja ponteiros, o tamanho real da representação de fio pode ser determinado apenas em tempo de execução.
Tópicos relacionados