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 成員並不重要,因此應該予以忽略。
傳回值
這個方法可以傳回下列值。
傳回碼 | 描述 |
---|---|
|
傳回的 FORMATETC 結構與傳遞的結構不同。 |
|
FORMATETC 結構相同,並在 pformatetcOut 中傳回 NULL。 |
|
lindex 的值無效;目前僅支援 -1。 |
|
pformatetc 的值無效。 |
|
物件應用程式未執行。 |
|
已發生未預期的錯誤。 |
|
dwDirection 參數無效。 |
|
此作業的記憶體不足。 |
備註
如果數據物件可為多個要求的 FORMATETC 結構提供完全相同的數據, GetCanonicalFormatEtc 可以提供「標準」或標準 FORMATETC ,以提供與一組更複雜的 FORMATETC 結構相同的轉譯。 例如,傳回的數據通常不區分在任一組其他 格式ETC 結構中指定的目標裝置。
來電者的附註
對這個方法的呼叫可以判斷數據物件上的 IDataObject::GetData 兩個呼叫,指定兩個不同的 FORMATETC 結構,實際上會產生相同的轉譯,因此不需要第二次呼叫並改善效能。 如果 呼叫 GetCanonicalFormatEtc 會導致標準格式寫入 pformatetcOut 參數,則呼叫端會在後續呼叫 IDataObject::GetData 時使用該結構。實作者的注意事項
在概念上,您可以考慮標準 FORMATETC 所定義群組中的 FORMATETC 結構,以提供與每個群組成員相同的結果。 在建構標準 FORMATETC 時,您應該確定它包含可能仍會產生特定轉譯的最一般資訊。對於永遠不會提供裝置特定轉譯的數據物件,此方法的最簡單實作是將輸入 FORMATETC 複製到輸出 FORMATETC、將 NULL 儲存在輸出 FORMATETC 的 ptd 成員中,並傳回DATA_S_SAMEFORMATETC。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | objidl.h |