represent_as属性
[represent_as] ACF 属性は、ターゲット言語 repr-type の名前付きローカル型を、クライアントとサーバー間で転送される名前付き転送型に関連付けます。
typedef [represent_as(repr-type) [[ , type-attribute-list ]] ] named-type;
void __RPC_USER named-type_from_local (
repr-type __RPC_FAR * ,
named-type __RPC_FAR * __RPC_FAR * );
void __RPC_USER named-type_to_local (
named-type __RPC_FAR * ,
repr-type __RPC_FAR * ); void __RPC_USER named-type _free_inst ( named-type __RPC_FAR * ); void __RPC_USER named-type _free_local ( repr-type __RPC_FAR * );
-
named-type
-
クライアントとサーバーの間で転送される名前付き転送データ型を指定します。
-
type-attribute-list
-
型に適用される 1 つ以上の属性を指定します。 複数の属性をコンマで区切ります。
-
repr-type
-
クライアントおよびサーバー アプリケーションに提示されるターゲット言語で表されるローカル型を指定します。
[represent_as] を使用する場合は、ローカル型と転送型の間で変換するルーチンと、変換されたデータを保持するために使用される空きメモリを指定する必要があります。 [represent_as] 属性は、ユーザー指定の変換ルーチンを呼び出すようにスタブに指示します。
転送された型 の名前付き型 は、MIDL 基本型、定義済みの型、または型識別子に解決する必要があります。 詳細については、「 MIDL 基本型」を参照してください。
次のルーチンを指定する必要があります。
ルーチン名 | 説明 |
---|---|
named_type**_from_local** | データをローカル型からネットワークの種類に変換します。 ルーチンは、ネットワーク データ型のポインターによって参照されるすべてのデータのメモリを含む、ネットワーク データ型のメモリを割り当てます。 |
named_type**_to_local** | データをネットワークの種類からローカル型に変換します。 ルーチンは、ローカル型のポインターによって参照されるデータにメモリを割り当てる役割を担います。 RPC は、ローカル型自体にメモリを割り当てます。 |
named_type**_free_local** | ローカル型のポインターによって参照されるデータに割り当てられたメモリを解放します。 RPC は型自体のメモリを解放します |
named_type**_free_inst** | ネットワーク型のポインターによって参照されるデータと、ネットワークの種類自体に割り当てられたメモリを解放します。 |
クライアント スタブは named-type**_from_local** を呼び出して、送信される型の領域を割り当て、データをローカル型からネットワーク型に変換します。 サーバー スタブは、元のデータ型の領域を割り当て、 named-type**_to_local** を呼び出して、ネットワーク型からローカル型にデータを変換します。
アプリケーション コードから戻ると、クライアントスタブとサーバー スタブは named-type**_free_inst** を呼び出して、ネットワークの種類のストレージの割り当てを解除します。 クライアント スタブは named-type**_free_local** を呼び出して、ルーチンによって返されるストレージの割り当てを解除します。
次の型は 、[represent_as] 属性を持つことはできません。
- 準拠、変化、または準拠の変化する配列
- 最後のメンバーが準拠配列である構造体 (準拠構造体)
- ポインターを含むポインターまたは型
- パイプまたはパイプを含む型
- パイプの基本タイプとして使用される型
- 定義済みの型 handle_t、 void
- [handle] 属性を持つ型
//these data types defined in .IDL or elsewhere
typedef struct _lbox
{
long data;
struct _lbox *next;
} lbox;
typedef [ref] lbox *PBOX_LOC;
typedef long LONG4[4];
//in .ACF file :
interface iface
{
typedef [ represent_as(PBOX_LOC) ] LONG4;
}