type_UserSize関数
<型>_UserSize 関数は、[ wire_marshal] 属性と [ user_marshal] 属性のヘルパー関数です。 スタブは、この関数を呼び出して、クライアント側またはサーバー側でデータがマーシャリングされる前に、ユーザー データ オブジェクトの RPC データ バッファーのサイズを設定します。 この関数は次のように定義されます。
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
関数名の <型> は、[wire_marshal] または [user_marshal] 型定義で指定された userm 型を意味します。 この型は、[user_marshal] 属性と共に使用する場合は、MIDL コンパイラには不明です。変換できない場合もあります。 ネットワーク型名 (ネットワーク経由で送信される型の名前) は、関数プロトタイプでは使用されません。 ただし、ワイヤタイプでは、OSF DCE で指定されたデータのレイアウトが定義されていることに注意してください。 すべてのデータをネットワーク データ表現 (NDR) 形式に変換する必要があります。
pFlags パラメーターは、符号なし長 フラグ フィールドへのポインターです。 フラグの上の単語には、浮動小数点、バイト順、および文字表現の OSF DCE で定義されている NDR 形式フラグが含まれています。 下の単語には、COM チャネルで定義されているマーシャリング コンテキスト フラグが含まれています。 フィールド内のフラグの正確なレイアウトを次の表に示します。
ビット | 旗 | 価値 |
---|---|---|
31-24 | 浮動小数点表現 | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
23-20 | 整数と浮動小数点のバイト順 | 0 = ビッグ エンディアン 1 = リトル エンディアン |
19-16 | 文字表現 | 0 = ASCII 1 = EBCDIC |
15-0 | マーシャリング コンテキスト フラグ | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
マーシャリング コンテキスト フラグを使用すると、RPC 呼び出しのコンテキストに応じてルーチンの動作を変更できます。 たとえば、ハンドル (長い) がある場合は、インプロセス呼び出しのハンドルを送信できますが、呼び出しの実際のデータを別のコンピューターに送信します。 マーシャリング コンテキスト フラグとその値は、プラットフォーム ソフトウェア開発キット (SDK) の Wtypes.h ファイルと Wtypes.idl ファイルで定義されます。
手記
ワイヤ タイプが適切に定義されている場合は、NDR エンジンが必要な変換を実行するため、NDR フォーマット フラグを使用する必要はありません。
パラメーター StartingSize は、現在のバッファー オフセットです。 開始サイズは、ユーザー オブジェクトのバッファー オフセットを示し、正しく配置されている場合と正しく配置されていない場合があります。 ルーチンは、必要なパディングを考慮する必要があります。
pMyObj パラメーターは、ユーザー型オブジェクトへのポインターです。
戻り値は、新しいオフセットまたはバッファー位置です。 関数は、累積サイズを返す必要があります。これは、開始サイズと可能なパディングとデータ サイズです。
関数>_UserSize <型は、必要なサイズの過大値を返すことができます。 送信バッファーの実際のサイズは、バッファー割り当てサイズではなく、データ サイズによって定義されます。
ワイヤ サイズをコンパイル時に計算できる場合、<型>_UserSize 関数は呼び出されません。 ほとんどの共用体では、ポインターがない場合でも、ワイヤ表現の実際のサイズは実行時にのみ決定できることに注意してください。
関連トピック
-
user_marshalとwire_marshal のマーシャリング規則を する