wire_marshal属性

[ wire_marshal] 属性は、[ transmit_as] の構文に似た IDL 型の属性ですが、ネットワーク経由でデータをマーシャリングするより効率的な方法を提供します。

[wire_marshal] 属性を使用して、アプリケーション固有のデータ型の代わりに送信されるデータ型を指定します。 各アプリケーション固有の型には、ネットワーク表現 (ネットワークで使用される表現) を定義する、対応する送信可能な型があります。アプリケーション固有の型は送信可能である必要はありませんが、MIDL が認識する型である必要があります。 MIDL に不明な型をマーシャリングするには、ACF 属性 [ user_marshal] を使用します。

アプリケーション固有の型には、単純型、複合型、またはポインター型を指定できます。 メイン制限は、型インスタンスに固定の適切に定義されたメモリ サイズが必要であることです。 型インスタンスのサイズを変更する必要がある場合は、準拠配列ではなくポインター フィールドを使用します。 または、変更可能な型へのポインターを定義することもできます。

データのサイズ設定、マーシャリング、およびマーシャリング解除、および関連付けられているメモリの解放のためのルーチンを指定する必要があります。 次の表では、ユーザーが指定した 4 つのルーチン名について説明します。 型>は<、[wire_marshal] 型定義で指定された userm 型です。

ルーチンによって返される値 説明
<type>_UserSize クライアント側またはサーバー側でマーシャリングする前に、RPC データ バッファーのサイズを設定します。
<type>_UserMarshal クライアント側またはサーバー側のデータをマーシャリングします。
<type>_UserUnmarshal クライアント側またはサーバー側のデータのマーシャリングを解除します。
<type>_UserFree サーバー側のデータを解放します。

 

これらのプログラマー指定ルーチンは、方向属性に基づいてクライアントまたはサーバー・アプリケーションによって提供されます。

パラメーターが [ in] の場合のみ、クライアントはサーバーに送信します。 クライアントには、<型_UserSizeおよび型>_UserMarshal関数が必要です。>< サーバーには、<型_UserUnmarshalおよび型>_UserFree関数が必要です。><

[ out]-only パラメーターの場合、サーバーはクライアントに送信します。 サーバーには型>_UserSizeおよび型_UserMarshal関数が必要<ですが、クライアントには型>_UserMarshal関数が<必要です。><

user_marshal属性

user_marshalとwire_marshalのマーシャリングルール

wire_marshal

user_marshal

NdrGetUserMarshalInfo