次の方法で共有


CoGetStandardMarshal 関数 (combaseapi.h)

呼び出し元に応じて、クライアント プロセスまたはサーバー プロセスのいずれかで既定の (標準) マーシャリング オブジェクトを作成し、そのオブジェクトの IMarshal 実装へのポインターを返します。

構文

HRESULT CoGetStandardMarshal(
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags,
  [out]          LPMARSHAL *ppMarshal
);

パラメーター

[in] riid

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

[in] pUnk

マーシャリングするインターフェイスへのポインター。

[in] dwDestContext

指定したインターフェイスをマーシャリング解除する宛先コンテキスト。 値は列挙 MSHCTX から取得されます。 マーシャリングの解除は、現在のプロセスの別のアパートメント (MSHCTX_INPROC) または現在のプロセスと同じコンピューター上の別のプロセス (MSHCTX_LOCAL) のいずれかで発生する可能性があります。

[in, optional] pvDestContext

このパラメーターは予約されており、 NULL である必要があります。

[in] mshlflags

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

[out] ppMarshal

標準マーシャラーへのインターフェイス ポインターを受け取る IMarshal* ポインター変数のアドレス。

戻り値

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

リターン コード 説明
S_OK
IMarshal インスタンスが正常に返されました。
CO_E_NOTINITIALIZED
この関数を呼び出すには、現在のスレッドで CoInitialize 関数または OleInitialize 関数を呼び出す必要があります。

注釈

CoGetStandardMarshal 関数は、必要に応じて、クライアント プロセスまたはサーバー プロセスのいずれかで既定の (標準) マーシャリング オブジェクトを作成し、そのオブジェクトの IMarshal ポインターを呼び出し元に返します。 IMarshal を実装する場合は、COM の既定の実装に委任する方法として CoGetStandardMarshal を呼び出す実装が必要な場合があります。これは、完全に理解していない、または処理する必要がない宛先コンテキストです。 それ以外の場合は、COM が内部マーシャリング プロシージャの一部として呼び出すこの関数を無視できます。

クライアント プロセスの COM ライブラリは、マーシャリングされたインターフェイス ポインターを受け取ると、パケットのマーシャリング解除のためにプロキシの作成に使用される CLSID を探します。 パケットにプロキシの CLSID が含まれていない場合、COM は CoGetStandardMarshal を呼び出し、 NULLpUnk 値を渡します。 この関数は、クライアント プロセスで標準プロキシを作成し、そのプロキシの IMarshal 実装へのポインターを返します。 COM は、このポインターを使用して CoUnmarshalInterface を呼び出して、要求されたインターフェイスへのポインターを取得します。

OLE サーバー アプリケーションの IMarshal の実装で CoGetStandardMarshal を呼び出す場合は、 (riid) の IID と、要求されるインターフェイス (pUnk) へのポインターの両方を渡す必要があります。

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

  1. pUnk が NULL かどうかを判断 します
  2. pUnkNULL の場合、指定した riid のクライアント プロセスに標準インターフェイス プロキシを作成し、プロキシの IMarshal ポインターを返します。
  3. pUnkNULL でない場合は、オブジェクトのマーシャラーが既に存在するかどうかを確認し、必要に応じて新しいマーシャラーを作成し、マーシャラーの IMarshal ポインターを返します。

要件

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

こちらもご覧ください

IMarshal