OleCreateFromData 関数 (ole2.h)

クリップボードから取得したデータ転送オブジェクトから、または OLE ドラッグ アンド ドロップ操作の一部として、埋め込みオブジェクトを作成します。 これは、OLE のドラッグ アンド ドロップ操作から貼り付けを実装するために使用することを目的としています。

構文

HRESULT OleCreateFromData(
  [in]  LPDATAOBJECT    pSrcDataObj,
  [in]  REFIID          riid,
  [in]  DWORD           renderopt,
  [in]  LPFORMATETC     pFormatEtc,
  [in]  LPOLECLIENTSITE pClientSite,
  [in]  LPSTORAGE       pStg,
  [out] LPVOID          *ppvObj
);

パラメーター

[in] pSrcDataObj

オブジェクトの作成元のデータを保持するデータ転送オブジェクトの IDataObject インターフェイスへのポインター。

[in] riid

呼び出し元が後で使用するインターフェイスの識別子を参照して、新しいオブジェクトと通信します (通常は、 IOleObject のインターフェイス識別子として OLE ヘッダーで定義IID_IOleObject)。

[in] renderopt

新しく作成されたオブジェクトが持つローカルにキャッシュされた描画またはデータ取得機能を示す列挙 OLERENDER の値。 その他の考慮事項については、次の「解説」セクションで説明します。

[in] pFormatEtc

新しく作成されたオブジェクトが持つローカルキャッシュ描画またはデータ取得機能を示す列挙 OLERENDER からの値へのポインター。 選択した OLERENDER 値は、 pFormatEtc パラメーターに指定できる値に影響します。

[in] pClientSite

オブジェクトがコンテナーからサービスを要求するプライマリ インターフェイスである IOleClientSite のインスタンスへのポインター。 このパラメーターは、NULL でもかまいません。

[in] pStg

ストレージ オブジェクトの IStorage インターフェイスへのポインター。 このパラメーターは NULL にすることはできません。

[out] ppvObj

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

戻り値

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

リターン コード 説明
OLE_E_STATIC
OLE で静的オブジェクトのみを作成できることを示します。
DV_E_FORMATETC
オブジェクトの作成に使用できる形式はありません。

注釈

OleCreateFromData 関数は、IDataObject インターフェイスをサポートするデータ転送オブジェクトから埋め込みオブジェクトを作成します。 この場合のデータ オブジェクトは、 OleGetClipboard 関数の呼び出しでクリップボードから取得された型か、OLE ドラッグ アンド ドロップ操作の一部です (データ オブジェクトは IDropTarget::D rop の呼び出しに渡されます)。

FileName または FileNameW クリップボード形式 (CF_FILENAME) がデータ転送オブジェクトに存在し、CF_EMBEDDEDOBJECTまたはCF_EMBEDSOURCEが存在しない場合、 OleCreateFromData は最初に、指定されたファイルを含むパッケージの作成を試みます。 一般に、最初に使用可能な形式が使用されます。

OleCreateFromData でパッケージを作成できない場合は、CF_EMBEDDEDOBJECT形式を使用してオブジェクトの作成を試みます。 その形式が使用できない場合、 OleCreateFromData はCF_EMBEDSOURCE形式で作成しようとします。 どちらの形式も使用できなくても、データ転送オブジェクトが IPersistStorage インターフェイスをサポートしている場合、 OleCreateFromData はオブジェクトの IPersistStorage::Save を呼び出してオブジェクト自体を保存します。

既存のリンク オブジェクトが選択され、コピーされた場合は、別の埋め込み可能なオブジェクトとしてクリップボードに表示されます。 したがって、 OleCreateFromData を呼び出す貼り付け操作では、リンクされたオブジェクトが作成される場合があります。 貼り付け操作の後、コンテナーは QueryInterface 関数を呼び出し、IID_IOleLink (OLE ヘッダーで IOleLink のインターフェイス識別子として定義) を要求して、リンクされたオブジェクトが作成されたかどうかを判断する必要があります。

renderopt パラメーターと pFormatetc パラメーターを使用して、新しく作成されたオブジェクトのキャッシュ機能を制御します。 これらのパラメーターの相互作用を使用してキャッシュ対象を決定する方法の一般的な情報については、 OLERENDER 列挙を参照してください。 ただし、 OleCreateFromData がキャッシュを初期化する方法には、これらのパラメーターの追加の特定の効果がいくつかあります。

OleCreateFromData が埋め込みオブジェクトを作成するためにCF_EMBEDDEDOBJECTまたはCF_EMBEDSOURCEクリップボード形式を使用する場合、2 つのメインの違いは、キャッシュ初期化データが格納される場所です。

  • CF_EMBEDDEDOBJECTは、ソースが既存の埋め込みオブジェクトであることを示します。 既に適切なデータがキャッシュに格納されており、OLE はこのデータを使用して新しいオブジェクトのキャッシュを初期化します。
  • CF_EMBEDSOURCEは、ソース データ オブジェクトにキャッシュ初期化情報がCF_EMBEDSOURCE以外の形式で含まれていることを示します。 OleCreateFromData では、 これらを使用して、新しく埋め込まれたオブジェクトのキャッシュを初期化します。
renderopt 値は、次のようにキャッシュの初期化に影響します。
説明
OLERENDER_DRAW & OLERENDER_FORMAT キャッシュされるプレゼンテーション情報が現在、適切なキャッシュ初期化プールに存在する場合は、その情報が使用されます。 (適切な場所は、CF_EMBEDDEDOBJECTのソース データ オブジェクト キャッシュ内にあり、CF_EMBEDSOURCEのソース データ オブジェクト内の他の形式にあります)。情報が存在しない場合、キャッシュは最初は空ですが、オブジェクトが初めて実行されるときに塗りつぶされます。 新しく作成されたオブジェクトには、他の形式はキャッシュされません。
OLERENDER_NONE 新しく作成されたオブジェクトにはキャッシュされません。 ソースにCF_EMBEDDEDOBJECT形式の場合は、コピーされた既存のキャッシュされたデータが削除されます。
OLERENDER_ASIS ソースの形式がCF_EMBEDDEDOBJECTの場合、新しいオブジェクトのキャッシュには、ソース オブジェクトと同じキャッシュ データが格納されます。 CF_EMBEDSOURCEの場合、新しく作成されたオブジェクトにキャッシュする必要はありません。 このオプションは、より高度なコンテナーで使用する必要があります。 この呼び出しの後、このようなコンテナーは IOleCache::CacheIOleCache::Uncache を呼び出して、キャッシュする内容を正確に設定します。 CF_EMBEDSOURCEでは、 IOleCache::InitCache も呼び出します。

要件

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

こちらもご覧ください

Idataobject

OleCreate