次の方法で共有


type_UserMarshal関数

<type>_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 型意味します。 この型は、MIDL コンパイラに不明な型である [user_marshal] 属性と共に使用する場合でも、転送できない場合があります。 ワイヤ型名 (透過型の名前) は、関数プロトタイプでは使用されません。 ただし、ワイヤ タイプでは、OSF DCE で指定されたデータのワイヤ レイアウトが定義されていることに注意してください。

pFlags パラメーターは、署名されていない長いフラグ フィールドへのポインターです。 フラグの上位ワードには、浮動小数点、バイト順、および文字表現に対して OSF DCE によって定義される NDR データ表現フラグが含まれています。 下の単語には、COM チャネルで定義されているマーシャリング コンテキスト フラグが含まれています。 フィールド内のフラグの正確なレイアウトについては、「 type_UserSize関数」を参照してください。

pBuffer パラメーターは、現在のバッファー ポインターです。 このポインターは、入力時に配置される場合と配置されていない場合があります。 型<>_UserMarshal関数は、バッファー ポインターを適切に配置し、データをマーシャリングし、マーシャリングされたオブジェクトの後の最初のバイトのアドレスである新しいバッファー位置を返す必要があります。 ワイヤ タイプの仕様によって、バッファー内のデータの実際のレイアウトが決まる点に注意してください。

pMyObj パラメーターは、ユーザー型オブジェクトへのポインターです。

戻り値は新しいバッファー位置です。これは、マーシャリングされていないオブジェクトの後の最初のバイトのアドレスです。

バッファー オーバーフローは、データのサイズを誤って計算し、予想よりも多くのデータをマーシャリングしようとすると発生する可能性があります。 この状況は避けるように注意する必要があります。 型が返すポインターを使用して、それに<>対してチェック_UserMarshalできます。 そうしないと、後で NDR エンジンでバッファー オーバーフロー例外が発生するリスクがあります。

例外はローカルでキャッチして処理する必要があります。例外を呼び出し履歴に割り当てることはできません。

user_marshalとwire_marshalのマーシャリングルール

wire_marshal

user_marshal