みなさんは Susie をご存じでしょうか…
SusieはWindows 3.1の頃からあるグラフィクスビューアです。
画像ファイルのみならずアーカイブファイルにも対応したオープンなプラグイン仕様によって、多種多様なプラグインが有志によって作られていて、かつては日本でかなり使われていたんじゃないかというような素晴らしいビューアでした。
前置きはその辺にしておいて、.NET CoreでSusie Plug-inを呼びだして扱えるようにした。プラグイン呼び出し部分は一通り出来たので、あとはアプリケーション部分を飽きるまで。
https://github.com/longod/WhiteAlbum/tree/main/WA.Susie
命名に困ったら最近のモノ・コトから拝借しがちー
— hikami, aka longod (@hikami_longod) December 11, 2021
ことの発端は、最近HDDのデータを整理をしているときに、古い画像ファイルとともに、昔使っていたプラグインが出土したことに起因する。
Susieは長らく更新が停止して動作が怪しくなりつつあるし、OSの更新でいつ動かなくなるかも分からない。プラグインに対応した他のアプリケーションも同様に軒並み古くなってしまったし、そもそもアーカイブまでサポートされたものは少なかった記憶がある。
プラグインもプラグインで、インターネット上に存在するプラグインはサイトの消滅と共に徐々に消えつつあり、惜しい状態だ。同様にインターネット上に存在するプラグインに関する情報も徐々に消えつつある。
じゃあ、今のうちに、次を満たす呼び出し側(ホスト)を作っておくか、というのが動機だ。
- オープンソース
- 扱いやすい
- 今の時代にモダンに動作する
- 将来的にも動作する可能性が高い
.NET CoreのバージョンはPrismの都合で3.1になったが、単体だけなら5とかに6に上げても動作すると思う。
x86 (32-bit) の影響を受ける
当たり前だけれど、プラグインは時代的に32-bitライブラリとして作られている。
正攻法でプラグインを呼び出すには、呼び出し側もx86でなくてはならない。それに伴って連鎖的にアプリケーション全体がx86になってしまう。今の64bit OSが主流の時代に。
プラグイン仕様書だけを見て作るのは大変
本家のプラグイン仕様書は、Plug-in packageのプラグイン集にテキストファイルとして同梱されている。プラグインを作る側はこれでも大体は問題ないが、プラグインを呼び出す側となると、Susieの内部挙動が公開されていないので大変だ。
このあたりの先人の知見は特に役に立った。
自分でダミーのプラグインを作る
いきなり既存のプラグインを叩いてみると、見事にデバッグ出来ない状況でクラッシュしたりハングアップしたりする。呼び出し方が悪いのか、プラグインそのものに問題があるのかを把握するために、自分で仕様書を元に適当なプラグインを作ってそれを呼び出してみた方が良い。
プラグインは当時の状況を想像しながら作る必要がある。
- 当然x86で作る。原理的には、x86以外にx64版プラグインも作れるだろうけれど、それに対応したアプリは皆無だろう。
- 時代が時代なので、非Unicodeのマルチバイト文字セットで作る。
- dllexportは、例えばMSVCだと既に無くなっているので、コンパイラが新たに提供している命令に置き換える必要がある。
- cdeclとstdcallを正しく指定する必要がある。正しくないといとも簡単にクラッシュする。仕様書にはPASCALを全般に渡って使用しているが、今はそれだと駄目だった。