type_UserMarshal関数
<型>_UserMarshal 関数は、[wire_marshal] 属性と [ user_marshal] 属性のヘルパー関数です。 スタブは、この関数を呼び出して、クライアント側またはサーバー側のデータをマーシャリングします。 この関数は次のように定義されます。
unsigned char __RPC_FAR * __RPC_USER <type>_UserMarshal(
unsigned long __RPC_FAR * pFlags,
unsigned char __RPC_FAR * pBuffer,
<type> __RPC_FAR * pMyObj);
関数名に><型は、[wire_marshal] または [user_marshal] 型定義で指定された userm 型を意味します。 この型は、[user_marshal] 属性と共に使用する場合は、MIDL コンパイラに不明な型であっても、変換できない場合があります。 ワイヤ型名 (透過型の名前) は、関数プロトタイプでは使用されません。 ただし、ワイヤ タイプでは、OSF DCE で指定されたデータのワイヤ レイアウトが定義されていることに注意してください。
pFlags パラメーターは、符号なし長フラグ フィールドへのポインターです。 フラグの上の単語には、浮動小数点、バイト順、および文字表現の OSF DCE で定義されている NDR データ表現フラグが含まれています。 下の単語には、COM チャネルで定義されているマーシャリング コンテキスト フラグが含まれています。 フィールド内のフラグの正確なレイアウトについては、「type_UserSize関数 で説明されています。
pBuffer パラメーターは、現在のバッファー ポインターです。 このポインターは、入力時にアラインされる場合と配置されない場合があります。 <型>_UserMarshal 関数は、バッファー ポインターを適切に配置し、データをマーシャリングして、マーシャリングされたオブジェクトの後の最初のバイトのアドレスである新しいバッファー位置を返す必要があります。 ワイヤ タイプの仕様によって、バッファー内のデータの実際のレイアウトが決まります。
pMyObj パラメーターは、ユーザー型オブジェクトへのポインターです。
戻り値は新しいバッファー位置です。これは、マーシャリングされていないオブジェクトの後の最初のバイトのアドレスです。
バッファー オーバーフローは、データのサイズを誤って計算し、予想よりも多くのデータをマーシャリングしようとすると発生する可能性があります。 このような状況を避けるために注意する必要があります。 型>_UserMarshal 返されるポインター<使用して、それに対して確認できます。 それ以外の場合は、後で NDR エンジンでバッファー オーバーフロー例外が発生するリスクがあります。
例外をキャッチしてローカルで処理する必要があります。例外は呼び出し履歴を割り当てることはできません。
関連トピック
-
user_marshalとwire_marshal のマーシャリング規則を する