Ignore-Attribut
Das [ignore] -Attribut gibt an, dass ein In einer Struktur oder Union enthaltener Zeiger und das durch den Zeiger angegebene Objekt nicht übertragen werden. Das [ignore] -Attribut ist auf Zeigermember von Strukturen oder Unions beschränkt.
[ignore] pointer-member-type pointer-name;
-
Zeigermembertyp
-
Gibt den Typ des Zeigermembers der Struktur oder Union an.
-
Zeigername
-
Gibt den Namen des Zeigermembers an, der beim Marshallen ignoriert werden soll.
Der Wert eines Strukturmembers mit dem [ignore] -Attribut ist am Ziel undefiniert. Ein [in] -Parameter ist auf dem Remotecomputer nicht definiert. Ein [out] -Parameter ist auf dem lokalen Computer nicht definiert.
Mit dem [ignore] -Attribut können Sie die Übertragung von Daten verhindern. Dies ist in Situationen wie einer doppelt verknüpften Liste nützlich. Das folgende Beispiel enthält eine doppelt verknüpfte Liste, die das Datenaliasing einführt:
/* 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 tritt im vorherigen Beispiel auf, da derselbe Speicherbereich über zwei verschiedene Zeiger in der Funktion p und p-next-previous>> verfügbar ist.
Beachten Sie, dass [ignore] nicht als Typattribute verwendet werden kann.
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;