GetFile
アーカイブ内のファイルを取得する
int _export PASCAL GetFile
(LPSTR src, long len, LPSTR dest, unsigned int flag, FARPROC prgressCallback, long lData)
引数 | 入出力 | 説明 |
src | IN |
入力がファイルの場合 | ファイル名 |
入力がメモリーの場合 | ファイルイメージへのポインタ |
|
len | IN |
入力がファイルの場合 | 読み込み開始オフセット |
入力がメモリーの場合 | データサイズ |
|
dest |
|
出力先がファイルの場合 | 出力先ディレクトリを指定する(書庫内の相対パスは無視される) |
出力先がメモリーの場合 | ファイルの入ったLOCALメモリーハンドルを受け取る変数へのポインタ |
|
flag | IN |
追加情報 「xxxx xDDD xxxx xSSS」(ビットフラグとして見る)
SSS (入力の形式) | 0 | ディスクファイル |
1 | メモリ上のイメージ |
DDD (出力先の形式) | 0 | ディスクファイル |
1 | メモリ上のイメージ |
|
lpPrgressCallback | IN |
途中経過を表示するコールバック関数へのポインタ。
NULLの場合、Plug-inは処理が終了するまでプロセスを占有し、中断も出来ません。
このコールバック関数の仕様はGetPictureや
GetPreviewのコールバック関数と同じ。
|
lData | IN |
コールバック関数に渡すlongデータ。
ポインタなどを必要に応じて受け渡せる。 |
戻り値
0なら正常終了、それ以外はエラーコードを返す。
解説
プラグインはLocalAllocによって必要なメモリーを確保し、そのハンドルを返す。
アプリケーションはLocalFreeによってメモリーを開放する必要がある。
GetFileで取得するファイルはアーカイブファイル内のファイル名ではなくアーカイブファイル中の開始位置を指定する事で指定する。
マルチスレッドで動作するアプリケーションからの呼び出しなどを考慮すると、
アーカイブPlug-in内でアーカイブファイル中のファイル名を保存しておいてはいけない。
実際にはGetFileでアーカイブファイルから取得するファイルは次のようにして指定される。
呼び出し側はGetFileで取得するファイルの情報を取得するために前もって
GetArchiveInfo
または
GetFileInfo
を呼び出す。
取得したfileInfo構造体のpositionメンバー(ファイル上での位置を保持する)
の値を使ってGetFileを呼び出す事で入力(srcとlen)を指定する。
src / lenに指定する値
入力の形式 | src | len |
ファイル |
ファイル名 |
fileInfo構造体のpositionメンバ値 |
メモリ |
ファイルイメージへの先頭のポインタ + position |
アーカイブファイルのサイズ - position |
Plug-inを利用するアプリケーションは、
GetFileで得た結果が2kbyte(2048byte)未満の場合に次の点に注意すること。
- IsSupportedにメモリインタフェースで渡す際には、2kbyte以上確保したメモリ領域にコピーするなどして渡すこと
- 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)を返却する。
目次へ戻る /
トップページへ戻る
この文書の無断転載を禁じます |
Copyright 竹村嘉人 |
Copyright kana |