Share via


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

呼叫端稍後用來與新對象通訊之介面標識碼的參考 (通常IID_IOleObject,在 OLE 標頭中定義為 IOleObject) 的介面識別符。

[in] renderopt

列舉 OLERENDER 的值,指出新建立物件所要擁有的本機快取繪圖或數據擷取功能。 下列一節將說明其他考慮。

[in] pFormatEtc

列舉 OLERENDER 中的值指標,指出新建立物件所要擁有的本機快取繪圖或數據擷取功能。 所選 的 OLERENDER 值會影響 pFormatEtc 參數的可能值。

[in] pClientSite

IOleClientSite 實例的指標,這是物件從其容器要求服務的主要介面。 此參數可以是 Null

[in] pStg

記憶體物件上 IStorage 介面的指標。 此參數可能不是 NULL

[out] ppvObj

接收 riid 中所要求介面指標的指標變數位址。 成功傳回時,*ppvObj 會在新建立的物件上包含要求的介面指標。

傳回值

此函式會在成功時傳回S_OK。 其他可能的值包括下列專案。

傳回碼 Description
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 函式,要求 OLE 標頭中定義的IID_IOleLink (做为 IOleLink) 的介面標識碼,以判斷是否已建立連結的物件。

使用 renderoptpFormatetc 參數來控制新建立物件的快取功能。 如需使用這些參數互動來判斷要快取之專案的一般資訊,請參閱 OLERENDER 列舉。 不過,在 OleCreateFromData 初始化快取的方式上,這些參數會有一些額外的特定效果。

OleCreateFromData 使用CF_EMBEDDEDOBJECT或CF_EMBEDSOURCE剪貼簿格式來建立內嵌物件時,兩者之間的主要差異在於快取初始化數據的儲存位置:

  • CF_EMBEDDEDOBJECT表示來源是現有的內嵌物件。 其快取中已經有適當的數據,OLE 會使用此數據來初始化新物件的快取。
  • CF_EMBEDSOURCE表示源數據物件包含CF_EMBEDSOURCE以外的格式的快取初始化資訊。 OleCreateFromData 會使用這些屬性來初始化新內嵌物件的快取。
renderopt 值會影響快取初始化,如下所示。
Description
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
程式庫 Ole32.lib
Dll Ole32.dll
API 集合 ext-ms-win-com-ole32-l1-1-3 (Windows 10 10.0.10240 版)

另請參閱

IDataObject

OleCreate