Share via


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 結構相同的轉譯。 例如,傳回的數據通常不區分在任一組其他 格式ETC 結構中指定的目標裝置。

來電者的附註

對這個方法的呼叫可以判斷數據物件上的 IDataObject::GetData 兩個呼叫,指定兩個不同的 FORMATETC 結構,實際上會產生相同的轉譯,因此不需要第二次呼叫並改善效能。 如果 呼叫 GetCanonicalFormatEtc 會導致標準格式寫入 pformatetcOut 參數,則呼叫端會在後續呼叫 IDataObject::GetData 時使用該結構。

實作者的注意事項

在概念上,您可以考慮標準 FORMATETC 所定義群組中的 FORMATETC 結構,以提供與每個群組成員相同的結果。 在建構標準 FORMATETC 時,您應該確定它包含可能仍會產生特定轉譯的最一般資訊。

對於永遠不會提供裝置特定轉譯的數據物件,此方法的最簡單實作是將輸入 FORMATETC 複製到輸出 FORMATETC、將 NULL 儲存在輸出 FORMATETCptd 成員中,並傳回DATA_S_SAMEFORMATETC

規格需求

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

另請參閱

IDataObject