midl_user_allocate関数

midl_user_allocate関数は、RPC アプリケーションの開発者が提供する必要があるプロシージャです。 RPC スタブおよびライブラリ ルーチンにメモリを割り当てます。 midl_user_allocate関数は、次のプロトタイプと一致する必要があります。

void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);

cBytes パラメーターは、割り当てるバイト数を指定します。 OSF 互換 (/osf) モードでコンパイルする場合を除き、クライアント アプリケーションとサーバー アプリケーションの両方で midl_user_allocate 関数を実装する必要があります。 アプリケーションと生成されたスタブは midl_user_allocate を直接または間接的に呼び出して、割り当てられたオブジェクトを管理します。 次に例を示します。

  • クライアント アプリケーションとサーバー アプリケーションは midl_user_allocate を呼び出して、ツリーまたはリンク されたリストに新しいノードを作成する場合など、アプリケーションのメモリを割り当てます。
  • サーバー スタブは サーバー アドレス空間にデータをマーシャリング解除するときにmidl_user_allocateを呼び出します。
  • クライアント スタブは 、[ out] ポインターによって参照されているサーバーからデータをアンマーシャリングするときにmidl_user_allocateを呼び出します。 [in]、[out]、および [unique] ポインターの場合、クライアント ス タブは入力 時に [unique] ポインター値が null であり、呼び出し中に null 以外の値に変更された場合にのみ、midl_user_allocateを呼び出します。 [unique] ポインターが入力時に null 以外の場合、クライアント スタブは関連付けられているデータを既存のメモリに書き込みます。

midl_user_allocateがメモリの割り当てに失敗した場合は、null ポインターを返す必要があります。

midl_user_allocate関数は、8 バイトのアラインポインターを返す必要があります。

たとえば、プラットフォーム ソフトウェア開発キット (SDK) で提供されるサンプル プログラムでは、C 関数 malloc の観点からmidl_user_allocateが実装されています。

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
    return((void __RPC_FAR *) malloc(cBytes));
}

Note

RpcSs パッケージが有効になっている場合 (たとえば、[ enable_allocate] 属性を使用した結果)、 RpcSmAllocate を使用してサーバー側にメモリを割り当てます。 [enable_allocate] の詳細については、「 MIDL リファレンス」を参照してください。