次の方法で共有


CoGetMarshalSizeMax 関数 (combaseapi.h)

指定したオブジェクトへの指定したインターフェイス ポインターをマーシャリングするために必要なバイト数の上限を返します。

構文

HRESULT CoGetMarshalSizeMax(
  [out]          ULONG     *pulSize,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

パラメーター

[out] pulSize

マーシャリング ストリームに書き込まれるデータ パケットのサイズ (バイト単位) の上限値へのポインター。 このパラメーターが 0 の場合、パケットのサイズは不明です。

[in] riid

ポインターがマーシャリングされるインターフェイスの識別子への参照。 このインターフェイスは、 IUnknown インターフェイスから派生する必要があります。

[in] pUnk

マーシャリングするインターフェイスへのポインター。 このインターフェイスは、 IUnknown インターフェイスから派生する必要があります。

[in] dwDestContext

指定したインターフェイスをマーシャリングしない宛先コンテキスト。 dwDestContext の値は、列挙 MSHCTX から取得されます。

[in, optional] pvDestContext

このパラメーターは予約済みであり、 NULL である必要があります。

[in] mshlflags

マーシャリングするデータをクライアント プロセスに通常のケースで返送するか、グローバル テーブルに書き込むかを示します。この場合、複数のクライアントで取得できます。 値は列挙 MSHLFLAGS から取得されます。

戻り値

この関数は、E_UNEXPECTED標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
上限が正常に返されました。
CO_E_NOTINITIALIZED
この関数を呼び出す前に、 CoInitialize 関数または OleInitialize 関数を呼び出す必要があります。

注釈

この関数は、次のタスクを実行します。

  1. オブジェクトに IMarshal ポインターを照会するか、オブジェクトが IMarshal を実装していない場合は、COM の標準マーシャラーへのポインターを取得します。
  2. 前の項目で取得したポインターを使用して、 IMarshal::GetMarshalSizeMax を呼び出します。
  3. GetMarshalSizeMax の呼び出しによって返される値にマーシャリング データ ヘッダーのサイズを加算し、場合によってはプロキシ CLSID の値を加算して、マーシャリング ストリームに書き込まれるデータ量の最大サイズ (バイト単位) を取得します。
IMarshal を実装している場合を除き、この関数を明示的に呼び出さないでください。この場合、マーシャリング スタブはこの関数を呼び出して、マーシャリングされるデータ パケットの正しいサイズを取得する必要があります。

このメソッドによって返される値は、マーシャリングされるオブジェクトの内部状態が変更されない限り、有効であることが保証されます。 したがって、実際のマーシャリングは、この関数が戻った直後に行う必要があります。または、スタブは、状態が変化したためにオブジェクトが最初に示したメモリよりも多くのメモリをマーシャリングする必要がある可能性があるリスクを実行します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

CoMarshalInterface

IMarshal::GetMarshalSizeMax