Share via


IDataObject::GetDataHere 方法 (objidl.h)

由資料取用者呼叫,以從來源資料物件取得資料。 這個方法與 GetData 方法不同,因為呼叫端必須配置並釋放指定的儲存媒體。

語法

HRESULT GetDataHere(
  [in]      FORMATETC *pformatetc,
  [in, out] STGMEDIUM *pmedium
);

參數

[in] pformatetc

FORMATETC結構的指標,定義傳遞資料時要使用的格式、中型和目標裝置。 只有一個媒體可以在 tymed中指定,而且只有下列值有效:TYMED_ISTORAGE、TYMED_ISTREAM、TYMED_HGLOBAL或TYMED_FILE。

[in, out] pmedium

STGMEDIUM結構的指標,定義包含所傳輸資料的儲存媒體。 媒體必須由呼叫端配置,並由 GetDataHere填入。 呼叫端也必須釋放媒體。 這個方法的實作必須一律為此參數指向之STGMEDIUM結構的punkForRelease成員提供Null值。

傳回值

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

傳回碼 描述
DV_E_LINDEX
lindex的值無效;目前僅支援 -1。
DV_E_FORMATETC
pformatetc的值無效。
DV_E_TYMED
tymed值無效。
DV_E_DVASPECT
dwAspect值無效。
OLE_E_NOTRUNNING
物件應用程式未執行。
STG_E_MEDIUMFULL
配置媒體時發生錯誤。
E_UNEXPECTED
已發生未預期的錯誤。
E_INVALIDARG
dwDirection參數無效。
E_OUTOFMEMORY
此作業的記憶體不足。

備註

GetDataHere方法類似于IDataObject::GetData,不同之處在于呼叫端必須同時配置和釋放pmedium中指定的媒體。 GetDataHere 會轉譯 FORMATETC 結構中所述的資料,並將資料複製到該呼叫端提供的 STGMEDIUM 結構中。 例如,如果媒體TYMED_HGLOBAL,這個方法就無法調整媒體大小或配置新的 hGlobal。

某些媒體不適用於 GetDataHere的呼叫,包括 GDI 類型,例如中繼檔。 GetDataHere方法無法將資料放入呼叫端提供的中繼檔。 一般而言,此方法中唯一支援的儲存媒體是TYMED_ISTORAGE、TYMED_ISTREAM和TYMED_FILE。

當傳輸媒體是資料流程時,OLE 會假設要傳回資料的位置,以及資料流程的搜尋指標的位置。 在 GetData 呼叫中,傳回的資料是從資料流程位置零到資料流程目前搜尋 (指標之前,也就是結束位置) 。 針對 GetDataHere,傳回的資料會從進入的資料流程位置到結束位置之前。

需求

   
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 objidl.h

另請參閱

IDataObject