Atributo transmit_as

O atributo [transmit_as] instrui o compilador a associar type-id*,* que é um tipo apresentado que os aplicativos cliente e servidor manipulam, com um tipo xmit-type transmitido.

typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list; 

void __RPC_USER type-id_to_xmit (
  type-id __RPC_FAR *,
  xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
  xmit-type __RPC_FAR *,
  type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
  type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
  xmit-type__RPC_FAR *);

Parâmetros

xmit-type

Especifica o tipo de dados que é transmitido entre cliente e servidor.

type-attribute-list

Especifica um ou mais atributos que se aplicam ao tipo . Os atributos de tipo válidos incluem [handle], [switch_type]; o atributo de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [cadeia de caracteres] e [ignorar]. Separe vários atributos com vírgulas.

type-specifier

Especifica um tipo base, struct, união, tipo de enumeração ou identificador de tipo. Uma especificação de armazenamento opcional pode preceder o especificador de tipo.

declarator-list

Especifica declaradores C padrão, como identificadores, declaradores de ponteiro e declaradores de matriz. Para obter mais informações, consulte Atributos de matriz e Sized-Pointer, matrizes e matrizes e ponteiros. A lista de declaradores consiste em um ou mais declaradores separados por vírgulas. O declarador de parâmetro no declarador de função, como o nome do parâmetro, é opcional.

type-id

Especifica o nome do tipo de dados apresentado aos aplicativos cliente e servidor.

Comentários

Para usar o atributo [transmit_as] , o usuário deve fornecer rotinas que convertem dados entre os tipos apresentados e transmitidos; essas rotinas também devem liberar memória usada para armazenar os dados convertidos. O atributo [transmit_as] instrui os stubs a chamar as rotinas de conversão fornecidas pelo usuário.

O tipo xmit-type transmitido deve resolve a um tipo base MIDL, tipo predefinido ou um identificador de tipo. Para obter mais informações, consulte Tipos base MIDL.

O usuário deve fornecer as rotinas a seguir.

Nome de rotina Descrição
type-id**_to_xmit** Converte dados do tipo apresentado para o tipo transmitido. Essa rotina aloca memória para o tipo transmitido e para todos os dados referenciados por ponteiros no tipo transmitido.
type-id**_from_xmit** Converte dados do tipo transmitido para o tipo apresentado. Essa rotina é responsável por alocar memória para dados referenciados por ponteiros no tipo apresentado. O RPC aloca memória para o próprio tipo.
type-id**_free_inst** Libera memória alocada para dados referenciados por ponteiros no tipo apresentado. O RPC libera memória para o próprio tipo.
type-id**_free_xmit** Libera o armazenamento usado pelo chamador para o tipo transmitido e para dados referenciados por ponteiros no tipo transmitido.

 

 

O stub do cliente chama type-id**_to_xmit** para alocar espaço para o tipo transmitido e converter os dados em objetos do tipo xmit-type. O stub do servidor aloca espaço para o tipo de dados original e chama type-id**_from_xmit** para converter os dados de seu tipo transmitido para o tipo apresentado.

Após o retorno do código do aplicativo, o stub do servidor chama type-id**_free_inst** para desalocar o armazenamento para type-id no lado do servidor. O stub do cliente chama type-id**_free_xmit** para desalocar o armazenamento do tipo xmit no lado do cliente.

Os seguintes tipos não podem ter um atributo [transmit_as] :

  • Identificadores de contexto (tipos com o atributo de tipo [context_handle] e tipos que são usados como parâmetros com o atributo [context_handle] )
  • Tipos que são pipes ou derivados de pipes
  • Tipos de dados usados como o tipo base de uma definição de pipe
  • Parâmetros que são ponteiros ou resolve para ponteiros
  • Parâmetros compatíveis, variáveis ou matrizes abertas
  • Estruturas que contêm matrizes em conformidade
  • O tipo predefinido handle_t, void

Os tipos transmitidos devem estar em conformidade com as seguintes restrições:

  • Eles não devem ser ponteiros ou conter ponteiros.
  • Eles não devem ser pipes ou conter pipes.

Exemplos

typedef struct _TREE_NODE_TYPE 
{ 
    unsigned short data; 
    struct _TREE_NODE_TYPE * left; 
    struct _TREE_NODE_TYPE * right; 
} TREE_NODE_TYPE; 
 
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE; 
 
void __RPC_USER TREE_TYPE_to_xmit( 
    TREE_TYPE __RPC_FAR * , 
    TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_from_xmit ( 
    TREE_XMIT_TYPE __RPC_FAR *, 
    TREE_TYPE __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_free_inst( 
    TREE_TYPE __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_free_xmit( 
    TREE_XMIT_TYPE __RPC_FAR *);

Confira também

Matrizes

Tipos base MIDL

context_handle

Enum

Identificador

handle_t

Arquivo IDL (definição de interface)

Ignorar

Ptr

Ref

string

Struct

switch_type

Typedef

union

Único

Vazio