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を返します。 その他の可能な値は次のとおりです。
リターン コード | 説明 |
---|---|
|
操作のメモリ不足。 |
|
1 つ以上のパラメーターが無効です。 |
|
予期しないエラーが発生しました。 |
|
指定されたインターフェイス識別子が無効です。 |
注釈
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...)
これらの呼び出しでは、 pUnkCfLocal と pUnkCfInProc のそれぞれに異なるクラス ファクトリ実装を渡します。 pUnkCfLocal が指すクラス ファクトリは、リモート プロセスに埋め込まれるオブジェクトを作成するために使用されます。これは、クライアントに関連付けられたハンドラー オブジェクトを使用する通常のケースです。 ただし、サーバーがオブジェクトを作成し、そのオブジェクトをそれ自体に埋め込む場合、 pUnkCfInProc はハンドラー インターフェイスをサポートするオブジェクトを作成できるクラス オブジェクトを指します。 ローカル クラスは オブジェクトを作成するために使用され、インプロセス クラスは埋め込みヘルパーを作成し、 pCF の最初のオブジェクトのクラス ファクトリへのポインターを渡します。
- カスタムのインプロセス オブジェクト ハンドラー。その場合、DLL は pCF の IClassFactory のプライベート実装へのポインターを渡すことによって埋め込みヘルパーを作成します。
flags パラメーターの値 | 目的 |
---|---|
EMBDHLP_INPROC_HANDLER | DLL オブジェクト アプリケーションで使用できる埋め込みヘルパーを作成します。具体的には、ヘルパーは既定のオブジェクト ハンドラーのキャッシュ機能を公開します。 |
EMBDHLP_INPROC_SERVER | インプロセス サーバーの一部として使用する埋め込みヘルパーを作成します。 pCF を NULL にすることはできません。 |
EMBDHLP_CREATENOW | pCF を使用してセカンダリ オブジェクトをすぐに作成します。pCF が NULL の場合は、標準プロキシ マネージャーが使用されます。 |
EMBDHLP_DELAYCREATE | (ヘルパーが実行中の状態になったときに) 必要になるまでセカンダリ オブジェクトの作成を遅延させ、速度とメモリの使用を強化します。 pCF は NULL にすることはできません。 このフラグでは、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 で導入) |