次の方法で共有


OleCreateEx 関数 (ole2.h)

OleCreate でサポートされている 1 つの形式ではなく、複数のプレゼンテーション形式またはデータのキャッシュを必要とするコンテナー内のオブジェクトのより効率的なインスタンス化をサポートすることで、OleCreate 機能を拡張します。

構文

HRESULT OleCreateEx(
  [in]  REFCLSID        rclsid,
  [in]  REFIID          riid,
  [in]  DWORD           dwFlags,
  [in]  DWORD           renderopt,
  [in]  ULONG           cFormats,
  [in]  DWORD           *rgAdvf,
  [in]  LPFORMATETC     rgFormatEtc,
  [in]  IAdviseSink     *lpAdviseSink,
  [out] DWORD           *rgdwConnection,
  [in]  LPOLECLIENTSITE pClientSite,
  [in]  LPSTORAGE       pStg,
  [out] LPVOID          *ppvObj
);

パラメーター

[in] rclsid

作成するオブジェクトのクラスを識別します。

[in] riid

返すオブジェクトのインターフェイスの識別子への参照。

[in] dwFlags

この値には、0 または OLECREATE_LEAVERUNNING (0x00000001) を指定できます。

[in] renderopt

OLERENDER 列挙から取得した値。

[in] cFormats

renderopt がOLERENDER_FORMATの場合、 は rgFormatEtc 配列内の FORMATETC 構造体の数を示します。これは少なくとも 1 つでなければなりません。 それ以外の場合は、このパラメーターは 0 である必要があります。

[in] rgAdvf

renderopt がOLERENDER_FORMATの場合、cFormats DWORD 要素の配列をポイントします。これらはそれぞれ ADVF 列挙からの値の組み合わせです。 この配列の各要素は、pAdviseSinkNULL か NULL 以外かに応じて、IOleCache::Cache または IDataObject::D Advise の呼び出しに advf パラメーターとして渡されます (以下を参照)。 それ以外のすべての場合、このパラメーターは NULL である必要があります。

[in] rgFormatEtc

renderopt がOLERENDER_FORMATされると、cFormats FORMATETC 構造体の配列を指します。 pAdviseSinkNULL の場合、この配列の各要素は pFormatEtc パラメーターとして、オブジェクトの IOleCache::Cache の呼び出しに渡されます。 これにより、オブジェクトのインプロセス ハンドラー (通常は既定のハンドラー) によって管理されるデータとプレゼンテーション キャッシュに、プレゼンテーションまたはその他のキャッシュ可能なデータが設定されます。 pAdviseSinkNULL 以外の場合、この配列の各要素は pFormatEtc パラメーターとして IDataObject::D Advise の呼び出しに渡されます。 これにより、呼び出し元 (通常は OLE コンテナー) は、オブジェクトから受信したデータの独自のキャッシュまたは処理を実行できます。 それ以外のすべての場合、このパラメーターは NULL である必要があります。

[in] lpAdviseSink

renderopt がOLERENDER_FORMATの場合は、有効な IAdviseSink ポインター (データ アドバイスのカスタム キャッシュまたは処理を示す) または NULL (データ形式の既定のキャッシュを示す) のいずれかを指定できます。 それ以外のすべての場合、このパラメーターは NULL である必要があります。

[out] rgdwConnection

iDataObject::D Advise を使用して各アドバイザリ接続に pAdviseSink インターフェイスが登録されている場合に返される dwConnection 値の配列を返す場所。返されたアドバイザリ接続が必要ない場合は NULLpAdviseSinkNULL の場合は NULL にする必要があります。

[in] pClientSite

オブジェクトがコンテナーからサービスを要求するプライマリ インターフェイスへのポインター。 このパラメーターは NULL である可能性があります。この場合、 IOleObject::SetClientSite を使用してできるだけ早くクライアント サイトを確立するのは呼び出し元の責任です。

[in] pStg

オブジェクトに使用するストレージへのポインターと、そのオブジェクトに対して確立された既定のデータまたはプレゼンテーション キャッシュ。 このパラメーターは NULL にすることはできません。

[out] ppvObj

riid で要求されたインターフェイス ポインターを受け取る出力ポインター変数のアドレス。 正常に戻ると、*ppvObj には、新しく作成されたオブジェクトに対して要求されたインターフェイス ポインターが含まれます。

戻り値

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

リターン コード 説明
E_NOINTERFACE
指定されたインターフェイス識別子が無効です。

注釈

OleCreate の次の呼び出し:

OleCreate(rclsid, riid, renderopt, pFormatEtc, pClientSite, pStg, ppvObj);

は、OleCreateEx に対する次の呼び出しと同じです。

DWORD    advf = ADVF_PRIMEFIRST;
    OleCreateEx(rclsid, riid, renderopt, 1, &advf, pFormatEtc, NULL, pClientSite, pStg, ppvObj);

既存のインスタンス化関数 (OleCreateOleCreateFromFileOleCreateFromDataOleCreateLinkOleCreateLinkToFileおよび OleCreateLinkFromData) は、インスタンス化時に、既定のキャッシュ場所 (渡された IStorage の '\001OlePresXXX' ストリーム内) に 1 つのプレゼンテーションまたはデータ形式のキャッシュのみを作成します。 さらに、次にオブジェクトが実行状態になったときに、これらのキャッシュを作成する必要があります。 ほとんどのアプリケーションでは、少なくとも 2 つのプレゼンテーション (画面とプリンター) をキャッシュする必要があり、ハンドラーとは異なる形式または場所でデータをキャッシュする必要があるため、アプリケーションは通常、オブジェクトの作成時にデータ キャッシュを準備するために、オブジェクト サーバーを複数回起動およびシャットダウンする必要があります (オブジェクトの挿入、ファイルからのオブジェクトの挿入、オブジェクトの貼り付けなど)。

これらの作成関数の拡張バージョンによって、この問題が解決されます。 OleCreateExOleCreateFromFileExOleCreateFromDataExOleCreateLinkExOleCreateLinkToFileExおよび OleCreateLinkFromDataEx には、追加のオプションを示す dwFlagsADVF 列挙からの rgAdvf をキャッシュする形式の数を示す cFormats という新しいパラメーターが含まれています。pAdviseSinkプレゼンテーション (既定のハンドラー) またはデータ (既定以外のハンドラー) のキャッシュが必要かどうかを示す場合は、iDataObject::D Advise Cookie を返す rgdwConnection、1 つの形式ではなく形式の配列である pFormatEtc

オブジェクトのハンドラーによって複数のプレゼンテーションを代わりにキャッシュする必要があるコンテナーでは、これらの関数を呼び出して、cFormats の形式の数、rgAdvf の各形式の ADVF フラグ、および pFormatEtc 内の形式のセットを指定できます。 これらのコンテナーは、pAdviseSink対して NULL を渡します。

独自のすべてのデータ キャッシュまたはプレゼンテーション キャッシュを実行するコンテナーは、これらの同じ手順を実行しますが、NULL 以外の pAdviseSink渡します。 IAdviseSink::OnDataChange 中に、オブジェクトまたはデータの独自のキャッシュまたは操作を実行します。 通常、このようなコンテナーでは、ADVF_NODATAとのアドバイザリ接続は確立されませんが、そのような接続は防止されません。

これらの新しい関数は、OLE 複合ドキュメント用です。 これらの関数を使用すると、アプリケーションは、現在の関数で必要な繰り返しの起動と初期化の手順を回避できます。 これらは、既定のデータ キャッシュとプレゼンテーション キャッシュを使用する OLE 複合ドキュメント コンテナー アプリケーションと、基になる IDataObject::D Advise サポートからの独自のキャッシュとデータ転送を提供するアプリケーションを対象とします。

要件

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

こちらもご覧ください

Advf

FORMATETC

IAdviseSink::OnDataChange

IDataObject::D Advise

IOleCache::Cache

IOleObject::SetClientSite

IStorage

OLERENDER

OleCreate