Compartilhar via


A função type_UserUnmarshal

A <função type>_UserUnmarshal é uma função auxiliar para os atributos [ wire_marshal] e [ user_marshal]. Os stubs chamam essa função para cancelar amarcação de dados no lado do cliente ou do servidor. A função é definida como:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserUnmarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

O <tipo> no nome da função significa o tipo de usuário especificado na definição de tipo [wire_marshal] ou [user_marshal] . Esse tipo pode ser intransmittable ou até mesmo , quando usado com o atributo [user_marshal] , desconhecido para o compilador MIDL. O nome do tipo de transmissão (o nome do tipo transmissível) não é usado no protótipo da função. Observe, no entanto, que o tipo de fio define o layout de fio para os dados, conforme especificado pelo OSF DCE.

O parâmetro pFlags é um ponteiro para um campo de sinalizador longo sem sinal . A palavra superior do sinalizador contém sinalizadores de representação de dados NDR, conforme definido pelo DCE do OSF para representações de ponto flutuante, ordem de bytes e caracteres. A palavra inferior contém um sinalizador de contexto de marshaling, conforme definido pelo canal COM. O layout exato dos sinalizadores dentro do campo é descrito em A função type_UserSize.

O parâmetro pBuffer é o ponteiro de buffer atual. Esse ponteiro pode ou não estar alinhado na entrada. Sua <função type>_UserUnmarshal deve alinhar o ponteiro do buffer adequadamente, remover omarsalizar os dados e retornar a nova posição de buffer, que é o endereço do primeiro byte após o objeto nãomarshaled.

O parâmetro pMyObj é um ponteiro para um objeto de tipo definido pelo usuário.

Em um ambiente heterogêneo, o mecanismo NDR executa qualquer conversão de dados necessária antes de chamar a <função type>_UserUnmarshal . Observe que o mecanismo de NDR realiza essa conversão de dados de acordo com a definição de tipo de transmissão fornecida para esse tipo de dados de usuário. O sinalizador indica a representação de dados do remetente.

Regras de marshaling para user_marshal e wire_marshal

wire_marshal

user_marshal