GetFile

アーカイブ内のファイルを取得する


int _export PASCAL GetFile (LPSTR src, long len, LPSTR dest, unsigned int flag, FARPROC prgressCallback, long lData)

引数 入出力 説明
src IN
入力がファイルの場合 ファイル名
入力がメモリーの場合 ファイルイメージへのポインタ
len IN
入力がファイルの場合 読み込み開始オフセット
入力がメモリーの場合 データサイズ
dest
IN
OUT
出力先がファイルの場合 出力先ディレクトリを指定する(書庫内の相対パスは無視される)
出力先がメモリーの場合 ファイルの入ったLOCALメモリーハンドルを受け取る変数へのポインタ
flag IN 追加情報 「xxxx xDDD xxxx xSSS」(ビットフラグとして見る)
SSS
(入力の形式)
0 ディスクファイル
1 メモリ上のイメージ
DDD
(出力先の形式)
0 ディスクファイル
1 メモリ上のイメージ
lpPrgressCallback IN 途中経過を表示するコールバック関数へのポインタ。 NULLの場合、Plug-inは処理が終了するまでプロセスを占有し、中断も出来ません。 このコールバック関数の仕様はGetPictureGetPreviewのコールバック関数と同じ。
lData IN コールバック関数に渡すlongデータ。 ポインタなどを必要に応じて受け渡せる。

戻り値

0なら正常終了、それ以外はエラーコードを返す。

解説

プラグインはLocalAllocによって必要なメモリーを確保し、そのハンドルを返す。 アプリケーションはLocalFreeによってメモリーを開放する必要がある。

GetFileで取得するファイルはアーカイブファイル内のファイル名ではなくアーカイブファイル中の開始位置を指定する事で指定する。 マルチスレッドで動作するアプリケーションからの呼び出しなどを考慮すると、 アーカイブPlug-in内でアーカイブファイル中のファイル名を保存しておいてはいけない。

実際にはGetFileでアーカイブファイルから取得するファイルは次のようにして指定される。 呼び出し側はGetFileで取得するファイルの情報を取得するために前もって GetArchiveInfo または GetFileInfo を呼び出す。 取得したfileInfo構造体のpositionメンバー(ファイル上での位置を保持する) の値を使ってGetFileを呼び出す事で入力(srclen)を指定する。

src / lenに指定する値
入力の形式srclen
ファイル ファイル名 fileInfo構造体のpositionメンバ値
メモリ ファイルイメージへの先頭のポインタ + position アーカイブファイルのサイズ - position

Plug-inを利用するアプリケーションは、 GetFileで得た結果が2kbyte(2048byte)未満の場合に次の点に注意すること。

  1. IsSupportedにメモリインタフェースで渡す際には、2kbyte以上確保したメモリ領域にコピーするなどして渡すこと
  2. MacBinなどのために先頭のn byte(n>0)をスキップする場合の事も考慮すること

コールバック関数

lpPrgressCallbackで渡されるコールバック関数のプロトタイプは次のとおり(C言語の場合)。

    int PASCAL ProgressCallback(int nNum, int nDenom, long lData);

まず nNum==0 でコールされ、nNum==nDenom になるまで定期的に呼ばれる。 戻り値が 非0 の時、Plug-inは処理を中断する。 ProgressCallbackに渡されるlDataはGetFileに渡されるlDataである。

例えばコールバック関数内ではユーザからの中断指示をチェックし、 コールバックの戻り値として非0を返却すればPlug-inは途中で展開を中断する。 中断した場合にはGetFileは戻り値としてエラーコード(1)を返却する。





00IN GetPluginInfo IsSupported GetPictureInfo GetPicture GetPreview ConfigurationDlg
00AM GetPluginInfo IsSupported GetArchiveInfo GetFileInfo GetFile ConfigurationDlg


目次へ戻る / トップページへ戻る
この文書の無断転載を禁じます
Copyright 竹村嘉人
Copyright kana