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) で提供されるサンプル プログラムは、mallocC 関数の観点から midl_user_allocate を実装します。
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
return((void __RPC_FAR *) malloc(cBytes));
}
手記
RpcSs パッケージが有効になっている場合 (たとえば、[enable_allocate] 属性を使用した結果)、RpcSmAllocateを使用してサーバー側にメモリを割り当てます。 [enable_allocate] の詳細については、「MIDL リファレンス」を参照してください。