IDataObject::GetCanonicalFormatEtc 方法 (objidl.h)

提供可能不同但逻辑上等效的 FORMATETC 结构。 使用此方法可以确定两个不同的 FORMATETC 结构是否会返回相同的数据,从而消除了重复呈现的需要。

语法

HRESULT GetCanonicalFormatEtc(
  [in]  FORMATETC *pformatectIn,
  [out] FORMATETC *pformatetcOut
);

参数

[in] pformatectIn

指向 FORMATETC 结构的指针,该结构定义调用方希望用于在后续调用(如 IDataObject::GetData)中检索数据的格式、介质和目标设备。 在这种情况下 ,tymed 成员并不重要,应忽略。

[out] pformatetcOut

指向 FORMATETC 结构的指针,该结构包含特定呈现可能的最常规信息,使其在规范上等效于 pformatetcIn。 调用方必须分配此结构, 并且 GetCanonicalFormatEtc 方法必须填充数据。 若要在后续调用(如 IDataObject::GetData)中检索数据,调用方将使用指定的 pformatetcOut 值,除非指定的值为 NULL。 如果方法返回DATA_S_SAMEFORMATETC,则此值为 NULL 。 在这种情况下 ,tymed 成员并不重要,应忽略。

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
返回的 FORMATETC 结构与传递的结构不同。
DATA_S_SAMEFORMATETC
FORMATETC 结构相同,pformatetcOut 中返回 NULL
DV_E_LINDEX
lindex 的值无效;目前仅支持 -1。
DV_E_FORMATETC
pformatetc 的值无效。
OLE_E_NOTRUNNING
对象应用程序未运行。
E_UNEXPECTED
发生意外错误。
E_INVALIDARG
dwDirection 参数无效。
E_OUTOFMEMORY
可用于此操作的内存不足。

注解

如果数据对象可以为多个请求的 FORMATETC 结构提供完全相同的数据,则 GetCanonicalFormatEtc 可以提供与一组更复杂的 FORMATETC 结构相同的呈现的“规范”或标准 FORMATETC。 例如,返回的数据通常对一组其他类似的 FORMATETC 结构中的任何一个中指定的目标设备不敏感。

调用方备注

调用此方法可以确定对数据对象进行 两次 IDataObject::GetData 调用(指定两个不同的 FORMATETC 结构)是否实际生成相同的呈现,从而无需第二次调用并提高性能。 如果对 GetCanonicalFormatEtc 的调用导致将规范格式写入 pformatetcOut 参数,则调用方随后在对 IDataObject::GetData 的后续调用中使用该结构。

实施者说明

从概念上讲,可以考虑由规范 FORMATETC 定义的组中的 FORMATETC 结构,该组提供与每个组成员相同的结果。 在构造规范 FORMATETC 时,应确保它包含可能仍生成特定呈现的最常规信息。

对于从未提供设备特定呈现的数据对象,此方法最简单的实现是将输入 FORMATETC 复制到输出 FORMATETC,在输出 FORMATETCptd 成员中存储 NULL,并返回DATA_S_SAMEFORMATETC。

要求

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

另请参阅

IDataObject