OleCreateLinkFromDataEx 関数 (ole2.h)

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

構文

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

パラメーター

[in] pSrcDataObj

リンク オブジェクトを作成するデータ オブジェクトへのポインター。

[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 列挙からの値の組み合わせです。 この配列の各要素は、pAdviseSinkNULL か NULL 以外かに応じて、IOleCache::Cache または IDataObject::D Advise の呼び出しに advf パラメーターとして渡されます (以下を参照)。 それ以外のすべての場合、このパラメーターは NULL である必要があります。

[in] rgFormatEtc

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

[in] lpAdviseSink

renderopt がOLERENDER_FORMATの場合は、有効な IAdviseSink ポインター (データ アドバイスのカスタム キャッシュまたは処理を示す) または NULL (データ形式の既定のキャッシュを示す) のいずれかを指定できます。

[in, out] rgdwConnection

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

[in] pClientSite

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

[in] pStg

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

[out] ppvObj

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

戻り値

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

リターン コード 説明
E_NOINTERFACE
指定されたインターフェイス識別子が無効です。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説

OleCreateLinkFromData の次の呼び出し:

OleCreateLinkFromData(pSrcDataObj, riid, renderopt, pFormatEtc, pClientSite, pStg, ppvObj);

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

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

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

これらの作成関数の拡張バージョンによって、この問題が解決されます。 OleCreateExOleCreateFromFileExOleCreateFromDataExOleCreateLinkExOleCreateLinkToFileExおよび 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

関連項目

IAdviseSink::OnDataChange

IDataObject::D Advise

IOleCache::Cache

IOleObject::SetClientSite

OleCreate

OleCreateLinkFromData