今回のシリーズはいかがだったでしょうか。COMインターフェイスとなると「ActiveX」とか「コントロールパネル」だとかの「インターフェイスを作る」ことが中心の解説が多いと思うので、今回のような「使う」ことだけを目的とした解説は結構希少価値があるような気がします。
では、最後に気がついたことを細々と。 |
永遠のライバル……タスクスケジューラー
タスクスケジューラー、Scheduled Tasksというフォルダには泣かされました。このフォルダを指し示すIShellFolderからRelease()を呼び出すと、見事にアクセス違反が発生してしまうのです。ちゃんと動いてるはずなのに、です。 一応解決策として、タスクスケジューラーはIEnumIDList::Next()の第3引数に2以上が返ってくるようなので、その部分をチェックしてなんとか切り抜けています。
ただ、筆者の環境は「IE4をアンインストールしたのにタスクスケジューラーだけ残った」状況なので、特殊なのかもしれません。 |
落ちる!!
95を使っているせいかもしれませんが、とにかく何度となく落ちました。ただ、デバッグ時にのみ落ちるようなので、どうやらMSDEVのバグらしいです。 起きる現象として……。 ・ブレークポイントで止まったまま ・文字列変数の中身を見ると凍る ・デバッグ中いきなりMSDEVが落ちる ・フォルダで「名前の変更」を行うとエクスプローラーが異常終了 とにかく最後のが一番困りました。かなりあっさり死んでくれます。でもこれ、本当にMSDEVのバグなんでしょうか、それとも単に「運がいい」だけなんでしょうか。でも他でも同じような話を聞くし……。 |
ファイル名の処理
ファイルをそのままショートカットにする場合には、ファイル名を加工する必要があります。 例えばフルパスをそのままショートカットのファイル名にする場合には、:や¥をそのまま使うことができません。これらの文字を置き換えたり消去する必要がああります。 また、拡張子を残すかどうかも問題です。Test.txtというファイルだったら、Test.txt.lnkとするのか、拡張子を取ってTest.lnkとするのか、ということです。 こういった細かい処理もアプリケーション側で行わなければならないでしょう。
それにしても、「ファイル名には次の文字は使えません」の中の,と;が使えちゃうのはなんでなんでしょうね。 |
APIとインターフェイス
さて、ここまでCOMインターフェイスを使ったファイラーについて解説してきましたが、実際のところ「できるだけAPIを使った方がいい」というのが筆者の結論です。
FindFirstFile()を使った検索は、拡張子別検索、フォルダとそうでないものを区別しての検索など、細かく高速に検索できます。インターフェイスを使ったものに比べて比較的使いやすく便利だと言えます。
そこで、筆者としてのお薦めは
当然、これはかなり管理が大変になります。が、筆者の感想はインターフェイスだけの力ワザはヤバイというものです。特にスピードの点でかなり問題が発生します。その他、フォルダごとに細かい設定なども必要になってきます。 |
まとめ
筆者はある意味、「COMインターフェイスに幻想を抱いていた」のかもしれません。しかし、実際は違いました。はっきり言って解らないことだらけです。 でも、それはただ単に知らないだけなのかもしれません。それに、これからもどんどん変わっていくでしょう。
ただひとつだけ言えること、それは「ファイラーは存在し得ない」ということでしょう。ファイルのような形をしているけれどもファイルでないもの、そういったものを扱えるアプリケーションが求められているからこそ、インターフェイスを使い、ファイラーを作製しようとしました。が結果的にそこにあるのは「ファイラー」ではない別のものでした。そして気付くのです、「エクスプローラーはファイラーではない」のだと。
今回のシリーズを終えて、「見えない実体の影を追い続けてきた」ような奇妙なむなしさが残りました。いわばこれは「OSの手のひらで踊る」ようなものです。 |
(C)KAB-studio 1998 ALL RIGHTS RESERVED. |