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 件のコメント:
コメントを投稿