2007年11月18日日曜日

IDataObject

IDataObject、DataFormats.Format、FORMATETCこの辺りは定義がいい加減で困る。

しょーもないところではIDataObject.DUnadvise()。戻り値voidなのに戻り値の解説がついてます。Cの#define値を見せられてもどうにもなりません…そもそもどうやって返せと。.NET Framework 3.5ではドキュメント修正されてめでたしめでたし…んなことありません。
お隣りのIDataObject.DAdvise()。戻り値intだから解説が…ふむふむ真っ当に見える? ところが、OLE_E_ADVISENOTSUPPORTEDを返そうとすると、refやらoutの値を設定しなさいとコンパイルエラーが。いえ、設定できないからOLE_E_ADVISENOTSUPPORTEDを返したいのですが…結局、戻り値ではなく例外を投げることに。

本題はこっち。FORMATETC.cfFormatはshort型。実際の値としてはshortで負になる値がよく使われる。
でもDataFormats.Format.Idとしてはint型なので正に…単純に==演算子で比較すると一致しません。結局

FORMATETC formatEtc;
DataFormats.Format dataFormat;
if( formatEtc.cfFormat == unchecked((short)dataFormat.Id) ){
...;
}
とするしかないでしょうか。

0 件のコメント: