« コンプレックス | トップページ | 今日は通院の日 »

2006-02-22

プログラムのメモ

Susie Plug-in の使用に関するメモ。

Susie Plug-in の関数の引数の型は LPSTR であり、UNICODE 版のアプリケーションで呼び出すときは注意が必要である。

Susie Plug-in はダイレクトリンクライブラリ(DLL)の一種であり、呼び出しの方法として「静的リンク」「動的リンク」がある。

静的リンクのメリットは「アプリケーションのコーディングが簡単になる」、デメリットは「特定の Susie Plug-in しか使えない」「Susie Plug-in が特定のディレクトリ(アプリケーションと同じディレクトリ、Windows ディレクトリ、システムディレクトリ、環境変数 PATH で指定されたディレクトリ)になければならない」である。

動的リンクのメリットは「Susie Plug-in が追加されても簡単に対応できる」「Susie Plug-in がパスの通っていないディレクトリに存在していても呼び出せる」、デメリットは「アプリケーションのコーディングが複雑になる」である。

静的リンクの場合

  1. implib.exe などを用いて、インポートライブラリを作成する。
    例: implib ifjpeg.lib ifjpeg.spi
  2. Spi_api.txt を参照して、関数定義をコーディングしておく。
    例: extern "C" int _export PASCAL GetPluginInfo(int, LPSTR, int);
  3. アプリケーション内で関数を使用する。
  4. アプリケーションをリンクする際、1. で作成したインポートライブラリもリンクする。

これでアプリケーションから Susie Plug-in を使うことが出来る。

動的リンクの場合

  1. Spi_api.txt を参照して、関数定義をコーディングしておく。
    例: typedef int (PASCAL *PGETPLUGININFO)(int, LPSTR, int);
  2. あらかじめ SHBrowseForFolder 関数を用いるなどして、Susie Plug-in が格納されているディレクトリを取得しておく。取得したディレクトリはレジストリに保存するなどして次回からも使えるようにしておく。
    #パスが通っていることが確実なら、この処理は不要。
  3. 関数ポインタを定義する。
    例: PGETPLUGININFO fpGetPluginInfo;
  4. LoadLibrary 関数で Susie Plug-in をロードする。
    例: if((hSusie = LoadLibrary(szPath)) == NULL) {
             ... (エラー処理) ...
         }
  5. GetProcAddress 関数で関数ポインタを取得する。
    例: if((fpGetPluginInfo
                 = (PGETPLUGININFO)GetProcAddress(hSusie, TEXT("GetPluginInfo"))) == NULL) {
             ... (エラー処理) ...
         }
  6. 5. で取得したポインタで関数を実行する。
    例: (*fpGetPluginInfo)(1, (LPSTR)szCurPath, sizeof(szCurPath));
  7. Susie Plug-in を解放する。
    例: FreeLibrary(hSusie);

これは非常に手抜きな方法。Spi_api.txt に示されている通り、*.spi ファイルを FindFirstFile、FindNextFile 関数などで列挙しておき、画像ファイルに対して IsSupported 関数でチェック、対応する Susie Plug-in の GetPicture 関数で表示するという処理を入れるべきだろう。
#Spi_api.txt では「*.plg」となっているが、多分これは誤植と思われる。

参考文献:
kana's Home Page

|

« コンプレックス | トップページ | 今日は通院の日 »

コンピュータ・プログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/1757/8787392

この記事へのトラックバック一覧です: プログラムのメモ:

« コンプレックス | トップページ | 今日は通院の日 »