ignore attribute
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.
[ignore] pointer-member-type pointer-name;
-
pointer-member-type
-
Specifies the type of the pointer member of the structure or union.
-
pointer-name
-
Specifies the name of the pointer member that is to be ignored during marshaling.
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 transmission 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.
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;