[ignore] pointer-member-type pointer-name;
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;
The ignore attribute designates that a pointer contained in a structure or union and the object indicated by the pointer is not transmitted. The ignore attribute is restricted to pointer members of structures or unions.
The value of a structure member with the ignore attribute is undefined at the destination. An in parameter is not defined at the remote computer. An out parameter is not defined at the local computer.
The ignore attribute allows you to prevent transmisison of data. This is useful in situations such as a double-linked list. The following example includes a double-linked list that introduces data aliasing:
/* 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);
Aliasing occurs in the preceding example because the same memory area is available from two different pointers in the function p and p->next->previous.
Note that ignore cannot be used as a type attribute.