Susieの入力プラグインの仕様について
(WhiteRabbit)
2001/11/30 16:20
Susieの入力プラグインを使うアプリケーションを作っていて思ったのですが、
仕様が冗長な気がします。
例えば、IsSupported と GetPicture のプラグイン側の実装の解釈が
二通りあるのが気になります。
1.GetPicture を呼ぶ前に IsSupported を呼ばなくてはならない。
つまり、GetPicture ではチェックしていない。
2.GetPicture と IsSupported は、画像を確保するかしないかの違い。
つまり、GetPicture でもチェックしている。
2の方がありがたいのですが、1の解釈をしたプラグインもあるようです。
それに、IsSupported に渡せるのが 「2kB 以上のヘッダ」というのも、
ファイルの半分か、ファイル全体か、はたまた2kBぴったりなのか、プラグイン側には
わからないので、チェックが不十分な場合もあると思います。
GetPicture で必ずチェックすると仕様を固めてしまえば、
IsSupported は必ずしも必要ないと思います。
また、ファイルからの読みとりとメモリからの読みとりの2通りがありますが、
拡張子を得られるかどうかの差しかないならば、
GetPluginInfo で対応拡張子を得られる以上、メモリに統一してもいいと思います。
そこで例えば、次のような簡略プラグイン仕様があるといいと思います。
/////////////////////////////////////////
// 01IN (Reduced Version)
・GetPluginInfo - Plug-inに関する情報を得る
Prototype:
extern "C" int _export PASCAL GetPluginInfo(int infono,
LPSTR buf,int buflen);
Parameter:
int infono : 取得する情報番号
0 : Plug-in APIバージョン
1 : Plug-in名、バージョン及び copyright
(SusieのAbout..に表示されます)
2n+2: 代表的な拡張子 ("*.JPG" "*.RGB;*.Q0" など)
2n+3: ファイル形式名
(ファイルタイプ名として使われます)
LPSTR buf : 情報を納めるバッファ
int buflen : バッファ長(byte)
Return:
バッファに書き込んだ文字数を返します。
情報番号が無効の場合、0を返します。
・GetPicture - 画像を展開する
Prototype:
extern "C" int _export PASCAL GetPicture(
void* buf, long len,
HANDLE *pHBInfo,HANDLE *pHBm,
FARPROC lpPrgressCallback, long lData);
Parameter:
void* buf : ファイルイメージへのポインタ
long len : データサイズ
HLOCAL *pHBInfo : BITMAPINFO 構造体が納められたメモリハンドルが返される。
HLOCAL *pHBm : ビットマップデータ本体のメモリハンドルが返される
FARPROC lpPrgressCallback :
途中経過を表示するコールバック関数へのポインタ、もしくはNULL。
NULLの場合、plug-inは処理が終了するまでプロセスを占有し、
中断も出来ません。
コールバック関数のprototype:
int PASCAL ProgressCallback(
int nNum,int nDenom,long lData);
まず nNum==0 でコールされ、nNum==nDenom になるまで
定期的に呼ばれる。
戻値が 非0 の時、Plug-inは処理を中断する。
long lData : コールバック関数に渡すlongデータ。
ポインタ等を必要に応じて受け渡せる。
Return:
エラーコード。0なら正常終了。
解説:
プラグインはLocalAllocによって必要なメモリーを確保し、そのハンドルを
返す。
アプリケーションはLocalFreeによってメモリーを開放する必要がある。
////////////////////////////////////////////////////
// アプリケーション側から使用できるライブラリ(個人で作ってもいい)
ファイルからの読み込みを簡略化する関数
1.GetPluinInfoから拡張子を得て、ファイル名と照らし合わせる。
2.ファイルをメモリに読み込む。
3.GetPictureを呼ぶ。エラーなら次のプラグインへ移る。
というライブラリをアプリケーションサイドで作成すれば、プラグイン側の重複をのぞき、堅牢なプラグイン、
簡単なアプリケーション開発が可能になると思うのですが、いかがでしょうか。
--「Susieの入力プラグインの仕様について」に対するコメント--
タイトル(Subject):
お名前(Your name):
Mail address:
Password:
:入力しておくとあとで削除できます
Your message:
7thBridge P ver0.26 (c)Takechin