IDataObject::GetData 方法 (objidl.h)

由数据使用者调用,以从源数据对象获取数据。 GetData 方法呈现指定 FORMATETC 结构中描述的数据,并通过指定的 STGMEDIUM 结构传输数据。 然后,调用方负责释放 STGMEDIUM 结构。

语法

HRESULT GetData(
  [in]  FORMATETC *pformatetcIn,
  [out] STGMEDIUM *pmedium
);

参数

[in] pformatetcIn

指向 FORMATETC 结构的指针,该结构定义在传递数据时要使用的格式、介质和目标设备。 使用布尔型 OR 运算符可以指定多个介质,从而允许方法在指定的介质中做出最佳选择。

[out] pmedium

指向 STGMEDIUM 结构的指针,指示存储介质包含通过其 tymed 成员返回的数据,以及通过其 pUnkForRelease 成员的值释放介质的责任。 如果 pUnkForReleaseNULL,则媒体的接收器负责释放它;否则, pUnkForRelease 指向相应对象的 IUnknown ,以便可以调用其 Release 方法。 媒体必须由 GetData 分配和填充。

返回值

此方法在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
DV_E_LINDEX
lindex 的值无效;目前仅支持 -1。
DV_E_FORMATETC
pformatetcIn 的值无效。
DV_E_TYMED
tymed 值无效。
DV_E_DVASPECT
dwAspect 值无效。
OLE_E_NOTRUNNING
对象应用程序未运行。
STG_E_MEDIUMFULL
分配介质时出错。
E_UNEXPECTED
发生意外错误。
E_INVALIDARG
dwDirection 值无效。
E_OUTOFMEMORY
此操作的可用内存不足。

注解

数据使用者调用 GetData 从数据对象检索数据,该数据对象通过存储介质 (通过 STGMEDIUM 结构) 定义。

给调用方的说明

可以使用布尔 OR 运算符指定多个可接受的 tymed 媒体。 GetData 必须从 OR'd 值中选择最能代表数据的介质,执行分配,并指示释放介质的责任。

跨流传输的数据从流指针的位置 0 扩展到当前流指针 (紧靠当前流指针之前的位置,即) 退出时流指针的位置。

实施者说明

GetData 必须检查 FORMATETC 结构中的所有字段。 请务必让 GetData 呈现请求的方面,并尽可能使用请求的媒体。 如果数据对象不符合 FORMATETC 中指定的信息,该方法应返回DV_E_FORMATETC。 如果尝试分配介质失败,该方法应返回STG_E_MEDIUMFULL。 请务必填写 STGMEDIUM 结构中的所有字段。

尽管调用方可以指定多个媒体来返回数据, 但 GetData 只能提供一个介质。 如果初始传输因所选介质而失败,则可以实现此方法,以在返回错误之前尝试指定的其他介质之一。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IDataObject