2002-05-15 [長年日記]

LispとかPrologとか

QMAILと何の関係もないけど、面白かったのでメモ。M.Hiroi's Home Page

METAタグでrefresh

IE6のセキュリティ設定のところを見ていたら、METAタグによるREFRESHを禁止することが出来るというのを発見。これで禁止しておけば、HTMLメールを見た瞬間に飛ばされてしまうのを防げるけれど、なぜかプログラムからコントロールするための値がドキュメントに書かれていない。何でだ。。

ちなみにIE6から?

Exception Handling in Windows CE

Exception Handling in Windows CEなんてページを発見。

基本的には、setjmpとlongjmpで例外処理と同じことを行う。ただしこのままだとスタックを巻き戻すときにローカルオブジェクトのデストラクタが呼ばれないので、それを呼ぶようにする。

具体的には、デストラクタで処理をしているクラスを全てあるクラスから派生させ、そのクラスを作成したときに記録する。偽tryブロックに入ったときにはそれも記録する。偽catchブロックに入ったら、二つの記録を見比べながら呼ばれていないデストラクタを呼び出していく。という感じ。

以前同じようなことを考えたのだけれど、標準ライブラリの中にまで手を入れなくてはいけないし、std::auto_ptrを作成するたびにそんな処理が行われるようになるのもなんだかなぁという感じなのでやめた。std::vectorやstd::auto_ptrのデストラクタがvirtualってのも。。コンストラクタから例外を投げるとデストラクタが呼ばれちゃうという問題もあるし。

このページにも書いてあるけれど、MFCの偽例外処理(MFC 1.0の頃からあるやつ)はスタックのロールバック時のデストラクタの呼び出しを行わないので、全然使い物にならない。もう、10年近く前のものだからしょうがないけど。でも、CEであれ使っちゃっている人結構いると思うんだけどなぁ。

ついでに、EXPAT XML Parserに、expatをCEに移植したものも発見。