transmit_as 属性
[transmit_as] 属性は、クライアントおよびサーバー アプリケーションが操作する提示型である type-id*,* を送信型 xmit-type に関連付けるようにコンパイラに指示します。
typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list;
void __RPC_USER type-id_to_xmit (
type-id __RPC_FAR *,
xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
xmit-type __RPC_FAR *,
type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
xmit-type__RPC_FAR *);
-
xmit-type
-
クライアントとサーバーの間で転送されるデータ型を指定します。
-
type-attribute-list
-
型に適用される 1 つ以上の属性を指定します。 有効な型属性には、[handle]、[switch_type]が含まれます。ポインター属性 [ref]、[unique]、または [ptr];と usage 属性 [string] と [ignore]。 複数の属性をコンマで区切ります。
-
type-specifier
-
基本型、構造体、共用体、列挙型、または型識別子を指定します。 省略可能なストレージ仕様は 、型指定子の前に置くことができます。
-
declarator-list
-
識別子、ポインター宣言子、配列宣言子など、標準の C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列、および 配列とポインター」を参照してください。 declarator-list は、コンマで区切られた 1 つ以上の宣言子で構成されます。 関数宣言子のパラメーター宣言子 (パラメーター名など) は省略可能です。
-
type-id
-
クライアント アプリケーションとサーバー アプリケーションに表示されるデータ型の名前を指定します。
[transmit_as] 属性を使用するには、提示された型と送信される型の間でデータを変換するルーチンを指定する必要があります。これらのルーチンは、変換されたデータを保持するために使用されるメモリも解放する必要があります。 [transmit_as] 属性は、ユーザー指定の変換ルーチンを呼び出すようにスタブに指示します。
送信される型 xmit-type は、MIDL 基本型、定義済みの型、または型識別子に解決する必要があります。 詳細については、「 MIDL 基本型」を参照してください。
ユーザーは、次のルーチンを指定する必要があります。
ルーチン名 | 説明 |
---|---|
type-id**_to_xmit** | 提示された型から送信型にデータを変換します。 このルーチンは、送信された型と、送信された型のポインターによって参照されるすべてのデータにメモリを割り当てます。 |
type-id**_from_xmit** | データを送信された型から提示された型に変換します。 このルーチンは、提示された型のポインターによって参照されるデータにメモリを割り当てる役割を担います。 RPC は、型自体にメモリを割り当てます。 |
type-id**_free_inst** | 提示された型のポインターによって参照されるデータに割り当てられたメモリを解放します。 RPC は、型自体のメモリを解放します。 |
type-id**_free_xmit** | 呼び出し元が送信された型と、転送された型のポインターによって参照されるデータに使用するストレージを解放します。 |
クライアント スタブは type-id**_to_xmit** を呼び出して、送信される型の領域を割り当て、データを xmit 型 のオブジェクトに変換します。サーバー スタブは、元のデータ型の領域を割り当て、 type-id**_from_xmit** を呼び出して、送信された型から提示された型にデータを変換します。
アプリケーション コードから戻ると、サーバー スタブは type-id**_free_inst** を呼び出して、サーバー側の type-id のストレージの割り当てを解除します。 クライアント スタブは type-id**_free_xmit** を呼び出して、クライアント側の xmit 型 ストレージの割り当てを解除します。
次の型に [transmit_as] 属性を指定することはできません。
- コンテキスト ハンドル ( [context_handle] 型属性を持つ型と、[ context_handle] 属性のパラメーターとして使用される型)
- パイプまたはパイプから派生した型
- パイプ定義の基本型として使用されるデータ型
- ポインターまたはポインターに解決されるパラメーター
- 適合する、変化する、または開いている配列であるパラメーター
- 適合する配列を含む構造体
- 定義済みの型 handle_tvoid
送信される型は、次の制限に準拠している必要があります。
- ポインターにしたり、ポインターを含めたりすることはできません。
- パイプにしたり、パイプを含めたりすることはできません。
typedef struct _TREE_NODE_TYPE
{
unsigned short data;
struct _TREE_NODE_TYPE * left;
struct _TREE_NODE_TYPE * right;
} TREE_NODE_TYPE;
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE;
void __RPC_USER TREE_TYPE_to_xmit(
TREE_TYPE __RPC_FAR * ,
TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *);
void __RPC_USER TREE_TYPE_from_xmit (
TREE_XMIT_TYPE __RPC_FAR *,
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_inst(
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_xmit(
TREE_XMIT_TYPE __RPC_FAR *);