IDataObject::GetCanonicalFormatEtc メソッド (objidl.h)

異なる可能性があるが論理的に等価な FORMATETC 構造体を 提供します。 このメソッドを使用して、2 つの異なる FORMATETC 構造体が同じデータを返すかどうかを判断し、重複するレンダリングが不要になります。

構文

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

パラメーター

[in] pformatectIn

IDataObject::GetData などの後続の呼び出しでデータを取得するために呼び出し元が使用する形式、メディア、ターゲット デバイスを定義する FORMATETC 構造体へのポインター。 この場合、 tymed メンバーは重要ではなく、無視する必要があります。

[out] pformatetcOut

特定のレンダリングに使用できる最も一般的な情報を含む FORMATETC 構造体へのポインター。 pformatetcIn と正規に同等になります。 呼び出し元はこの構造体を割り当てる必要があり、 GetCanonicalFormatEtc メソッドでデータを入力する必要があります。 IDataObject::GetData などの後続の呼び出しでデータを取得するには、指定された値が NULL でない限り、呼び出し元は指定された pformatetcOut の値を使用します。 メソッドが 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 構造体のセットのいずれかで指定されたターゲット デバイスに対して区別されないのが一般的です。

呼び出し元へのメモ

このメソッドを呼び出すと、データ オブジェクトで 2 つの異なる FORMATETC 構造体を指定して IDataObject::GetData を 2 回呼び出すと、実際に同じレンダリングが生成されるかどうかを判断できるため、2 回目の呼び出しが不要になり、パフォーマンスが向上します。 GetCanonicalFormatEtc を呼び出すと、正規形式が pformatetcOut パラメーターに書き込まれる場合、呼び出し元はその構造体を IDataObject::GetData への後続の呼び出しで使用します。

実装者へのメモ

概念的には、各グループ メンバーと同じ結果を提供する正規の FORMATETC によって定義されたグループ内の FORMATETC 構造体を考え出すことができます。 正規の FORMATETC を構築する際には、特定のレンダリングを引き続き生成する可能性のある最も一般的な情報が含まれていることを確認する必要があります。

デバイス固有のレンダリングを提供しないデータ オブジェクトの場合、このメソッドの最も簡単な実装は、入力 FORMATETC を出力 FORMATETC にコピーし、出力 FORMATETCptd メンバーに NULL を格納し、DATA_S_SAMEFORMATETCを返します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h

こちらもご覧ください

Idataobject