netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-01-24 古い日記からの変換データ ▲
2006-01-24 ▲
_ [VolumeDeskbar] さらに問題の修正 ▲
デスクバンド情報をウィンドウ側に通知するために IOleCommandTarget のポインタを取得していた(SetSite で渡ってくる引数を参照型変数に代入していた)のに,それを SetSite(nil) のときにきちんとその参照型変数を nil に戻してないのが,実はオブジェクトの解放がきちんとおきない原因だったらしい.
Microsoft が提供している Deskband.cpp のサンプルでは,こんな通知処理なんかはしてないので,気づかなかった.
たぶん,参照されている限り解放しない(カウントが0になった時点で自動解放)という賢いコードなのだろうけど,今回みたいな循環参照環境(バンドが,自身を格納するウィンドウへの参照を保持してしまう)では,どうしようもなかった.
結局,正解の手順は: CloseDWでウィンドウを解放(このときにTMixerのインスタンスも解放)しておく→SetSite(nil)呼び出しのときに,古いSiteオブジェクトへの参照をすべて捨てる→デスクバンドオブジェクトのデストラクタが呼ばれる.
CloseDWでウィンドウを解放し忘れると,TMixer のインスタンスが生き残ってしまい,ウィンドウ破棄後に音量変更のメッセージが無効なウィンドウハンドルに届いてしまいエラーになるし,SetSiteで古いSiteオブジェクトへの参照を解放しないと,オブジェクトのデストラクタが呼ばれないことになる.で,参照の解放というのは,Delphiの場合は単に参照変数に nil を代入するだけで良かったらしい.
2007-01-24 ▲
_ [work] 論文での用語定義 ▲
論文の書き方については,千葉先生の解説がわりと読む量が少なくて良いと思います.あとはこちらの解説文なんかも参考になると思います.
上記の解説では「論理の鎖を省略しないこと」という,ちょっと格好いい表現が使われていますが,論理の鎖で大事なものの1つが,論文中で使う用語の定義だと思います.
未定義な用語を発見するための個人的なチェック法は,論文の先頭から出てくる名詞に対して片っ端から「それって何?」とツッコミを入れていくというものです.その場所から論文を前のほうへ遡っていき,定義(あるいは informal な解説)が発見できればOKです.
この作業は,それなりに時間がかかりますが,アブストラクトや前書きあたりに適用すると,提案手法に読み進むまで何の説明もない用語をたまに発見できたりします.
ただ,未定義の用語を発見するより,その用語の定義・解説を省略しても大丈夫かどうかという判断のほうが難しい気がします.ソフトウェア関連の用語は増え続けているので,特に説明せずに使える用語はどのあたりまでか,という基準はいまいちうまく説明できません.論文での重要度とか,雑誌記事などで目にする頻度が影響していそうですが.良い判断基準があれば教えてください :)