ignore 属性
[ignore] 属性は、構造体または共用体に含まれるポインターと、ポインターによって示されるオブジェクトが送信されないことを指定します。 [ignore] 属性は、構造体または共用体のポインター メンバーに制限されます。
[ignore] pointer-member-type pointer-name;
-
pointer-member-type
-
構造体または共用体のポインター メンバーの型を指定します。
-
pointer-name
-
マーシャリング中に無視されるポインター メンバーの名前を指定します。
[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>> の 2 つの異なるポインターから同じメモリ領域を使用できるため、エイリアシングが行われます。
[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;