игнорировать атрибут
Атрибут [ignore] указывает, что указатель, содержащийся в структуре или объединении, и объект, указанный указателем, не передается. Атрибут [ignore] ограничен элементами структур или объединений указателя.
[ignore] pointer-member-type pointer-name;
-
тип pointer-member
-
Указывает тип элемента указателя структуры или объединения.
-
указатель-имя
-
Указывает имя элемента указателя, который должен быть проигнорирован во время маршалинга.
Значение элемента структуры с атрибутом [ignore] не определено в назначении. Параметр [in] не определен на удаленном компьютере. Параметр [out] не определен на локальном компьютере.
Атрибут [ignore] позволяет предотвратить передачу данных. Это полезно в таких ситуациях, как двойной список. В следующем примере содержится список с двойным связыванием, в который вводится псевдоним данных:
/* 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);
Псевдонимы происходят в предыдущем примере, так как та же область памяти доступна из двух разных указателей в функции p и p-next-previous>>.
Обратите внимание, что [ignore] нельзя использовать в качестве атрибута типа.
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;