IDataObject::GetDataHere 方法 (objidl.h)

由数据使用者调用,以从源数据对象获取数据。 此方法与 GetData 方法的不同之处在于调用方必须分配和释放指定的存储介质。

语法

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

parameters

[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 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

请参阅

IDataObject