OleCreateEmbeddingHelper 関数 (ole2.h)

OLE の既定のオブジェクト ハンドラーの一部で集計されたアプリケーション指定のコードを使用して、OLE 埋め込みヘルパー オブジェクトを作成します。 このヘルパー オブジェクトは、呼び出し元によって決定された特定のコンテキストとロールで作成および使用できます。

構文

HRESULT OleCreateEmbeddingHelper(
  [in]  REFCLSID       clsid,
  [in]  LPUNKNOWN      pUnkOuter,
  [in]  DWORD          flags,
  [in]  LPCLASSFACTORY pCF,
  [in]  REFIID         riid,
  [out] LPVOID         *lplpObj
);

パラメーター

[in] clsid

支援するクラスの CLSID。

[in] pUnkOuter

埋め込みヘルパーを集計する場合は、外部オブジェクトの制御する IUnknown インターフェイスへのポインター。 集計しない場合はまれですが、値は NULL にする必要があります。

[in] flags

埋め込みヘルパーのロールと作成コンテキストを指定するフラグを含む DWORD。 有効な値については、次の「解説」セクションを参照してください。

[in] pCF

関数がセカンダリ オブジェクトの作成に使用するクラス オブジェクトの IClassFactory インターフェイスへのポインター。 状況によっては、この値が NULL になる場合があります。 詳細については、「解説」を参照してください。

[in] riid

呼び出し元が必要とするインターフェイスの識別子への参照。

[out] lplpObj

riid で要求されたインターフェイス ポインターを受け取るポインター変数のアドレス。 正常に戻ると、*ppvObj には、新しく作成された埋め込みヘルパーに要求されたインターフェイス ポインターが含まれます。

戻り値

この関数は、成功したS_OKを返します。 その他の可能な値は次のとおりです。

リターン コード 説明
E_OUTOFMEMORY
操作のメモリ不足。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_UNEXPECTED
予期しないエラーが発生しました。
E_NOINTERFACE
指定されたインターフェイス識別子が無効です。

注釈

OleCreateEmbeddingHelper 関数は、既定のハンドラーで見つかったのと同じインターフェイス実装をサポートするオブジェクトを作成しますが、ハンドラー オブジェクトとしてだけでなく、より一般的に使用できる追加のフックがあります。 次の 2 つの呼び出しでは、同じ結果が生成されます。

OleCreateEmbeddingHelper(clsid, pUnkOuter, EMBDHLP_INPROC_HANDLER | 
    EMBDHLP_CREATENOW, NULL, iid, ppvObj) 
 
OleCreateDefaultHandler(clsid, pUnkOuter, iid, ppvObj) 

埋め込みヘルパーは集計可能です。 pUnkOuter は、埋め込みヘルパーが一部となる集計の制御 IUnknown です。 OLE の既定のハンドラーの新しいインスタンスを作成するために使用されます。これは、さまざまなロールのオブジェクトをサポートするために使用できます。 呼び出し元は、 その IClassFactory 実装へのポインターを OleCreateEmbeddingHelper に渡します。 その後、このオブジェクトと既定のハンドラーが集計され、新しい埋め込みヘルパー オブジェクトが作成されます。

OleCreateEmbeddingHelper 関数は、通常、次のいずれかの実装をサポートするために使用されます。

  • コンテナーとサーバーの両方として使用され、オブジェクト自体への挿入をサポートする EXE オブジェクト アプリケーション。 この場合、 CreateEmbeddingHelper を使用すると、 オブジェクトは通常ハンドラーでのみサポートされるインターフェイスをサポートできます。 これを実現するには、アプリケーションで最初に CLSID をさまざまなコンテキストに登録し、次のように、1 つではなく CoRegisterClassObject 関数に対して 2 つの登録呼び出しを行う必要があります。
    CoRegisterClassObject(clsidMe, pUnkCfLocal, CLSCTX_LOCAL_SERVER, 
            REGCLS_MULTI_SEPARATE...) 
     
        CoRegisterClassObject(clsidMe, pUnkCfInProc, CLSCTX_INPROC_SERVER, 
        
            REGCLS_MULTI_SEPARATE...) 
    

    これらの呼び出しでは、 pUnkCfLocalpUnkCfInProc のそれぞれに異なるクラス ファクトリ実装を渡します。 pUnkCfLocal が指すクラス ファクトリは、リモート プロセスに埋め込まれるオブジェクトを作成するために使用されます。これは、クライアントに関連付けられたハンドラー オブジェクトを使用する通常のケースです。 ただし、サーバーがオブジェクトを作成し、そのオブジェクトをそれ自体に埋め込む場合、 pUnkCfInProc はハンドラー インターフェイスをサポートするオブジェクトを作成できるクラス オブジェクトを指します。 ローカル クラスは オブジェクトを作成するために使用され、インプロセス クラスは埋め込みヘルパーを作成し、 pCF の最初のオブジェクトのクラス ファクトリへのポインターを渡します。

  • カスタムのインプロセス オブジェクト ハンドラー。その場合、DLL は pCFIClassFactory のプライベート実装へのポインターを渡すことによって埋め込みヘルパーを作成します。
flags パラメーターは、埋め込みヘルパーの使用方法と、埋め込みヘルパーの初期化方法とタイミングを示します。 フラグの値は、次の表の値をまとめて OR で取得します。
flags パラメーターの値 目的
EMBDHLP_INPROC_HANDLER DLL オブジェクト アプリケーションで使用できる埋め込みヘルパーを作成します。具体的には、ヘルパーは既定のオブジェクト ハンドラーのキャッシュ機能を公開します。
EMBDHLP_INPROC_SERVER インプロセス サーバーの一部として使用する埋め込みヘルパーを作成します。 pCFNULL にすることはできません。
EMBDHLP_CREATENOW pCF を使用してセカンダリ オブジェクトをすぐに作成します。pCF が NULL の場合は、標準プロキシ マネージャーが使用されます。
EMBDHLP_DELAYCREATE (ヘルパーが実行中の状態になったときに) 必要になるまでセカンダリ オブジェクトの作成を遅延させ、速度とメモリの使用を強化します。 pCFNULL にすることはできません。 このフラグでは、EMBDHLP_INPROC_HANDLER フラグを使用できません。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ole2.h
Library Ole32.lib
[DLL] Ole32.dll
API セット ext-ms-win-com-ole32-l1-1-5 (Windows 10 バージョン 10.0.15063 で導入)

こちらもご覧ください

OleCreateDefaultHandler