2011年5月31日火曜日

SelectObject ではまった

ビットマップ・オブジェクトの内容が破壊される場合があるという不可思議な現象で、丸一日デバッグに費やしてしまった。

同じ HBITMAP を2回連続で SelectObject していたのが原因であるらしい。そういえば、随分昔に、GdiObject のペンスタイルかブラシスタイルかのどちらか忘れたが、スタイルのサポート状況がグラフィック・ドライバ依存で、はまった事もあったのを思いだした。
考え方としては、APIコールは安全であるようにパラメータチェックをAPI側が、ある程度責任を持つ。という場合と、APIコールは速度重視で、利用する側が責任を持つ。の2通りが考えられ、GDIは、後者だったと戒めてたはずなのに…とほほ。

  swap( a, b ) が a == b の場合は何もしないよう実装すべきってのに状況が似てるような気も・・・。疲れた・・・。

2011/06/09 追記: KERNELBASE.DLL 0x4ce7bafa というのは、GDI絡みなのではないか?

0 件のコメント: