ignorar atributo
O atributo [ignore] designa que um ponteiro contido em uma estrutura ou união e o objeto indicado pelo ponteiro não são transmitidos. O atributo [ignore] é restrito a membros ponteiros de estruturas ou uniões.
[ignore] pointer-member-type pointer-name;
-
pointer-member-type
-
Especifica o tipo do membro ponteiro da estrutura ou união.
-
pointer-name
-
Especifica o nome do membro do ponteiro que deve ser ignorado durante o marshaling.
O valor de um membro de estrutura com o atributo [ignore] é indefinido no destino. Um parâmetro [in] não é definido no computador remoto. Um parâmetro [out] não é definido no computador local.
O atributo [ignore] permite impedir a transmissão de dados. Isso é útil em situações como uma lista vinculada duas vezes. O exemplo a seguir inclui uma lista vinculada dupla que apresenta o alias de dados:
/* IDL file */
typedef struct _DBL_LINK_NODE_TYPE
{
long value;
struct _DBL_LINK_NODE_TYPE * next;
struct _DBL_LINK_NODE_TYPE * previous;
} DBL_LINK_NODE_TYPE;
HRESULT remote_op([in] DBL_LINK_NODE_TYPE * list_head);
/* application */
DBL_LINK_NODE_TYPE * p, * q
p = (DBL_LINK_NODE_TYPE *) midl_user_allocate(
sizeof(DBL_LINK_NODE_TYPE));
q = (DBL_LINK_NODE_TYPE *) midl_user_allocate(
sizeof(DBL_LINK_NODE_TYPE));
p->next = q;
q->previous = p;
p->previous = q->next = NULL;
..
remote_op(p);
O alias ocorre no exemplo anterior porque a mesma área de memória está disponível de dois ponteiros diferentes na função p e p-next-previous>>.
Observe que [ignorar] não pode ser usado como um atributo de tipo.
typedef struct _DBL_LINK_NODE_TYPE
{
long value;
struct _DBL_LINK_NODE_TYPE * next;
[ignore] struct _DBL_LINK_NODE_TYPE * previous;
} DBL_LINK_NODE_TYPE;