transmit_as 属性
[transmit_as] 属性は、クライアントおよびサーバー アプリケーションが操作する提示された型である type-id**を、送信された型 xmit 型と関連付けるようコンパイラに指示します。
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];と使用法属性 [string] と[ignore]. 複数の属性をコンマで区切ります。
-
type-specifier
-
基本型、構造体、共用体、列挙型、または型識別子を指定します。 オプションのストレージ仕様の前に 型指定子を指定できます。
-
declarator-list
-
識別子、ポインター宣言子、配列宣言子など、標準の C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列、および 配列とポインター」を参照してください。 declarator-list は、コンマで区切られた 1 つ以上の宣言子で構成されます。 関数宣言子のパラメーター宣言子 (パラメーター名など) は省略可能です。
-
type-id
-
クライアントおよびサーバー アプリケーションに表示されるデータ型の名前を指定します。
注釈
[transmit_as] 属性を使用するには、提示された型と送信される型の間でデータを変換するルーチンを指定する必要があります。これらのルーチンは、変換されたデータを保持するために使用されるメモリも解放する必要があります。 [transmit_as] 属性は、ユーザー指定の変換ルーチンを呼び出すようにスタブに指示します。
送信される型 xmit 型 は、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_t、 void
送信される型は、次の制限に準拠している必要があります。
- ポインターまたはポインターを含めてはなりません。
- パイプまたはパイプを含めてはなりません。
例
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 *);
関連項目