OleCreateFromDataEx 関数 (ole2.h)
OleCreateFromData でサポートされている単一の形式ではなく、複数の形式のプレゼンテーションまたはデータのキャッシュを必要とするコンテナー内のオブジェクトのより効率的なインスタンス化をサポートすることで、OleCreateFromData 機能を拡張します。
構文
HRESULT OleCreateFromDataEx(
[in] LPDATAOBJECT pSrcDataObj,
[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] pSrcDataObj
新しいオブジェクトの作成に使用される新しいデータを保持するデータ転送オブジェクトへのポインター。 ( 「OleCreateFromData」を参照してください)。
[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の場合、DWORD 要素の配列をポイントします。これらはそれぞれ ADVF 列挙からの値の組み合わせです。 この配列の各要素は、pAdviseSink が NULL か NULL 以外かに応じて、IOleCache::Cache または IDataObject::D Advise の呼び出しに advf パラメーターとして渡されます (以下を参照)。 それ以外のすべての場合、このパラメーターは NULL である必要があります。
[in] rgFormatEtc
renderopt がOLERENDER_FORMATされると、 は FORMATETC 構造体の配列を指します。 pAdviseSink が NULL の場合、この配列の各要素は pFormatEtc パラメーターとして、オブジェクトの IOleCache::Cache の呼び出しに渡されます。 これにより、オブジェクトのインプロセス ハンドラー (通常は既定のハンドラー) によって管理されるデータとプレゼンテーション キャッシュに、プレゼンテーションまたはその他のキャッシュ可能なデータが設定されます。 pAdviseSink が NULL 以外の場合、この配列の各要素は pFormatEtc パラメーターとして IDataObject::D Advise の呼び出しに渡されます。 これにより、呼び出し元 (通常は OLE コンテナー) は、オブジェクトから受信したデータの独自のキャッシュまたは処理を実行できます。
[in] lpAdviseSink
renderopt がOLERENDER_FORMATされている場合は、有効な IAdviseSink ポインター (データ アドバイスのカスタム キャッシュまたは処理を示す ) または NULL (データ形式の既定のキャッシュを示す) のいずれかを指定できます。
[out] rgdwConnection
IDataObject::D Advise を使用して各アドバイザリ接続に IAdviseSink インターフェイスが登録されている場合に返される dwConnection 値の配列を返す場所。返されたアドバイザリ接続が必要ない場合は NULL。 pAdviseSink が NULL の場合、このパラメーターは NULL である必要があります。
[in] pClientSite
オブジェクトがコンテナーからサービスを要求するプライマリ インターフェイスへのポインター。 このパラメーターは NULL である可能性があります。この場合、 IOleObject::SetClientSite を使用してできるだけ早くクライアント サイトを確立するのは呼び出し元の責任です。
[in] pStg
オブジェクトに使用するストレージへのポインターと、そのオブジェクトに対して確立された既定のデータまたはプレゼンテーション キャッシュ。
[out] ppvObj
riid で要求されたインターフェイス ポインターを受け取る出力ポインター変数のアドレス。 正常に戻ると、*ppvObj には、新しく作成されたオブジェクトに対して要求されたインターフェイス ポインターが含まれます。
戻り値
この関数は、成功したS_OKを返します。 その他の可能な値は次のとおりです。
リターン コード | 説明 |
---|---|
|
指定されたインターフェイス識別子が無効です。 |
|
1 つ以上のパラメーターが無効です。 |
注釈
OleCreateFromData の次の呼び出し:
OleCreateFromData(lpszFileName, riid, renderopt, pFormatEtc, pClientSite, pStg, ppvObj);
は、 OleCreateFromDataEx に対する次の呼び出しと同じです。
DWORD advf = ADVF_PRIMEFIRST;
OleCreateFromFileEx(rclsid, lpszFileName, riid, renderopt, 1, &advf, pFormatEtc, NULL, pClientSite, pStg, ppvObj);
既存のインスタンス化関数 (OleCreate、 OleCreateFromFile、 OleCreateFromData、 OleCreateLink、 OleCreateLinkToFile、 および OleCreateLinkFromData) は、インスタンス化時に既定のキャッシュ位置 (渡された IStorage の '\001OlePresXXX' ストリーム内) に 1 つのプレゼンテーションまたはデータ形式のキャッシュのみを作成します。 さらに、次にオブジェクトが実行状態になったときに、これらのキャッシュを作成する必要があります。 ほとんどのアプリケーションでは、少なくとも 2 つのプレゼンテーション (画面とプリンター) をキャッシュする必要があり、ハンドラーとは異なる形式または場所でデータをキャッシュする必要があるため、アプリケーションは通常、オブジェクトの作成時にデータ キャッシュを準備するために、オブジェクト サーバーを複数回起動およびシャットダウンする必要があります (オブジェクトの挿入、ファイルからのオブジェクトの挿入、オブジェクトの貼り付けなど)。
これらの作成関数の拡張バージョンによって、この問題が解決されます。 OleCreateEx、OleCreateFromFileEx、OleCreateFromDataEx、OleCreateLinkEx、OleCreateLinkToFileEx、および OleCreateLinkFromDataEx には、追加のオプションを示す dwFlags、ADVF 列挙からキャッシュする形式の数を示す cFormats、キャッシュする各形式のアドバイス フラグを指定する cFormats が含まれています。pAdviseSinkプレゼンテーション (既定のハンドラー) またはデータ (既定以外のハンドラー) のキャッシュが必要かどうかを示す場合は、iDataObject::D Advise Cookie を返す rgdwConnection、1 つの形式ではなく形式の配列である rgFormatEtc。
オブジェクトのハンドラーによって複数のプレゼンテーションを代わりにキャッシュする必要があるコンテナーは、これらの関数を呼び出して、cFormats の形式の数、rgAdvf の各形式の ADVF フラグ、および rgFormatEtc 内の形式のセットを指定できます。 これらのコンテナーは、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 |