======================================================================= Bga32.dll version 0.37 API 説明ファイル 木村 利靖 Toshinobu Kimura ======================================================================= このファイルは、BGA32.DLLでサポートされているAPIに関する説明ファイルです。 アーカイバ DLL の API に準拠してありますが、すべての API をサポートしている わけではありません。 各 API について、以下のように分類されます。 ◎...完全にサポート ○...一部仕様を満たしていない なお、記載していない API は現状では実装されていません。 ======================================================================= LHA.DLL 互換 API ======================================================================= ----------------------------------------------------------------------- ○ int WINAPI Bga( const HWND hWnd, LPCSTR pCmdLine, LPSTR pOutput, const DWORD dwSize ); ----------------------------------------------------------------------- 順序数 1 機能 圧縮/解凍を行います。 引数 hWnd BGA32.DLL を呼び出すアプリのウィンドウ・ハンドル。 BGA32.DLL は実行時にこのウィンドウに対して EnableWin- dow() を実行しウィンドウの動作を抑制します。ウィンドウ が存在しないコンソールアプリの場合や,指定する必要のな い場合は NULL を渡します。 pCmdLine BGA32.DLL に渡すコマンド文字列。 pOutput BGA32.DLL が結果を返すためのバッファ。グローバルメモリ 等の場合はロックされている必要があります。 サイズに制限はありません。 ※現状では、無効です。バッファには何も返しません。 dwSize バッファのサイズ。結果が指定サイズを越える場合は、この サイズに切り詰められます。 結果がこのサイズより小さい場合は、最後に NULL 文字が 付加されます。(最低1文字のみが保証される) バッファのサイズいっぱいの場合等、NULL 文字がどこにもない 可能性がある点に留意のこと。 ※現状では、無効です。 戻り値 正常終了の時 0 エラーが発生した場合 0 以外の数(エラー値 >= 0x8000:後述)。 なお、解凍先に既にファイルがあるなどの理由で解凍をスキップ した場合でも 0 を返します。 ----------------------------------------------------------------------- ◎ WORD WINAPI BgaGetVersion() ----------------------------------------------------------------------- 順序数 2 機能 BGA32.DLL のバージョンを返します。 戻り値 現在のバージョン 37 -> version 0.37 100 -> version 1.00 その他 仕様変更等への対応を考慮して,バージョンのチェックを推奨します。 ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaGetRunning() ----------------------------------------------------------------------- 順序数 10 機能 現在 BGA32.DLL が動作中かどうかを返します。 戻り値 実行中であれば TRUE を返します。 実行中でなければ FALSE を返します。 ======================================================================= LHA.DLL 非互換 API ======================================================================= ----------------------------------------------------------------------- ○ BOOL WINAPI BgaCheckArchive( LPCSTR pFileName, const int iMode ) ----------------------------------------------------------------------- 順序数 11 機能 指定ファイルが BGA32.DLL が扱える書庫かどうかを調査します。 引数 pFileName チェックすべき書庫のファイル名。 iMode チェックモード。 CHECKARCHIVE_RAPID 簡易モード。最初から3つ目までのヘッダのみ チェックします。 CHECKARCHIVE_BASIC 簡易モード。すべてのファイルヘッダについて チェックします。 現状、BGA32.DLL では他のチェックモードは指定できません。 戻り値 FALSE : ファイルが書庫ではないか、チェックモードが不正のとき FALSE 以外 : .GZA / .BZA ファイルのとき ※ 現状では暫定で以下の値を返しています。 1 : .GZA ファイルのとき 2 : .BZA ファイルのとき ----------------------------------------------------------------------- ○ BOOL WINAPI BgaConfigDialog( const HWND hWnd, LPSTR pOption, const int iMode ) ----------------------------------------------------------------------- 順序数 12 機能 コマンドラインでスイッチが指定されなかった場合の動作を既定します。 「個別ファイル名の変更[ -f ]」以外のすべてのスイッチを設定可能です。 ここで指定した設定とコマンドラインで指定されたスイッチを組み合わせた 結果で動作を決定します。 ただし、コマンドラインでの指定が優先されます。 設定は レジストリの Software\ArchiverDll\Bga32 以下に書き込まれます。 引数 hWnd BGA32.DLL を呼び出すアプリのウィンドウのハンドル。 pOption レジストリに書き込まれる内容と同様の動作を行うコマンド 文字列を得るためのバッファのポインタ。 バッファサイズは 513 バイト以上確保してください。 コマンド文字列を必要としない場合は NULL を指定してください。 iMode 展開時と格納時のどちらについてのものかを指定します。 ただし、BGA32.DLL ではこの指定は無視されます。 UNPACK_CONFIG_MODE 1 展開時についてのスイッチを指定。 PACK_CONFIG_MODE 2 格納時についてのスイッチを指定。 戻り値 BGA32.DLL が既に実行中の時 ERROR_ALREADY_RUNNING 設定が成功した時 TRUE キャンセル時 FALSE ----------------------------------------------------------------------- ◎ int WINAPI BgaGetFileCount( LPCSTR pArcFile ) ----------------------------------------------------------------------- 順序数 17 機能 指定された書庫ファイルに格納されているファイル数を取得します。 引数 pArcFile 格納ファイル数を得たい書庫ファイル名 戻り値 >= 0 格納ファイル数 -1 エラー その他 内部的には CHECKARCHIVE_BASIC モードで BgaCheckArchive() を呼び 出しています。(^^; ----------------------------------------------------------------------- ○ BOOL WINAPI BgaQueryFunctionList( const int iFunction ) ----------------------------------------------------------------------- 順序数 18 機能 指定された API が使用可能かどうかを調べます。 引数 iFunction API を示す数値。具体的な数値については BGA32API.H を 参照して下さい。 戻り値 TRUE API が使用可能 FALSE API が使用不可、または iFunction が無効な値 ======================================================================= OpenArchive 系 API ======================================================================= ----------------------------------------------------------------------- ○ HARC WINAPI BgaOpenArchive( const HWND hWnd, LPCSTR pFileName, const DWORD dwMode ) ----------------------------------------------------------------------- 順序数 21 機能 ハンドルと書庫ファイルを結び付けます。 引数 hWnd BGA32.DLL を呼び出すアプリのウィンドウのハンドル pFileName 書庫ファイル名。書庫ファイル名はひとつだけ指定できます。 dwMode BgaFindFirst() 等の処理のモード M_CHECK_ALL_PATH ファイル名の検索時に全パスを検索する。 M_CHECK_FILENAME_ONLY 検索時にファイル名のみを対象とする。 0 M_CHECK_FILENAME_ONLY と同等 現状では他のモードはサポートしていません。 戻り値 指定の書庫ファイルに対応したハンドル。エラー時は NULL を返します。 注意 現バージョンでは,同時に複数のハンドルを利用する事はできません。(^^; ----------------------------------------------------------------------- ◎ int WINAPI BgaCloseArchive( HARC hArc ) ----------------------------------------------------------------------- 順序数 22 機能 BgaOpenArchive() で割り付けたハンドルを解放します。 BGA32.DLL では、DLL のアンロード時に自動的にハンドルを解放しません ので、アクセス終了時にはかならずこの API を呼び出してください。 引数 hArc BgaOpenArchive() で返されたハンドル。 戻り値 常に 0 を返します。 ----------------------------------------------------------------------- ○ int WINAPI BgaFindFirst( HARC hArc, LPCSTR pWildName, LPINDIVIDUALINFO pSubInfo ) ----------------------------------------------------------------------- 順序数 23 機能 最初の格納ファイルの情報を取得します。 引数 hArc BgaOpenArchive() で返されたハンドル pWildName 検索するファイル名。ファイル名はひとつだけ指定できます。 pSubInfo 結果を返すための INDIVIDUALINFO 型の構造体へのポインタ。 結果を必要としない場合は NULL を指定できます。 戻り値 0 正常終了。pSubInfo で指定された変数に格納ファイルの情報が 設定されます。 -1 検索終了。 ----------------------------------------------------------------------- ○ int WINAPI BgaFindNext( HARC hArc, LPINDIVIDUALINFO pSubInfo ) ----------------------------------------------------------------------- 順序数 24 機能 2 番目以降の格納ファイルの情報を取得します。 引数 hArc UnlhaOpenArchive() で返されたハンドル。 pSubInfo 結果を返すための INDIVIDUALINFO 型の構造体へのポインタ。 結果を必要としない場合は NULL を指定できます。 戻り値 0 正常終了。pSubInfo で指定された変数に格納ファイルの情報が 設定されます。 -1 検索終了。 ----------------------------------------------------------------------- ◎ DWORD WINAPI BgaGetArcOriginalSize( HARC hArc ) ----------------------------------------------------------------------- 順序数 33 機能 検索にマッチしたファイルのサイズの合計を得ます。BgaFindNext() を 呼び出した後でないと返却値に意味はありません。検索中の場合はそ れまでにマッチしたファイルのサイズの合計となります。 戻り値 合計サイズ。エラー時には -1 を返します。 ----------------------------------------------------------------------- ◎ DWORD WINAPI BgaGetArcCompressedSize( HARC hArc ) ----------------------------------------------------------------------- 順序数 34 機能 検索にマッチしたファイルの圧縮サイズの合計を得ます。BgaFindNext() を 呼び出した後でないと返却値に意味はありません。検索中の場合はそ れまでにマッチしたファイルのサイズの合計となります。 戻り値 圧縮サイズの合計。エラー時には -1 を返します。 ----------------------------------------------------------------------- ◎ WORD WINAPI BgaGetArcRatio( HARC hArc ) ----------------------------------------------------------------------- 順序数 35 機能 検索にマッチしたファイルの全体の圧縮率を得ます。BgaFindNext() を 呼び出した後でないと返却値に意味はありません。検索中の場合はそ れまでにマッチしたファイルでの圧縮率となります。 戻り値 パーミル (千分率) で現された圧縮率。エラー時には -1 を返します。 ----------------------------------------------------------------------- INDIVIDUALINFO の構造 ----------------------------------------------------------------------- 構造体定義 typedef struct { DWORD dwOriginalSize; DWORD dwCompressedSize; DWORD dwCRC; UINT uFlag; UINT uOSType; WORD wRatio; WORD wDate; WORD wTime; char szFileName[FNAME_MAX32 + 1]; char dummy1[3]; char szAttribute[8]; char szMode[8]; }INDIVIDUALINFO ; メンバの説明 dwOriginalSize ファイルのサイズ dwCompressedSize 圧縮後のサイズ dwCRC BGA32.DLL では常に 0 です。 uFlag BGA32.DLL では常に 0 です。 uOSType BGA32.DLL では常に 0 です。 wRatio パーミル (千分率) で表された圧縮率。 wDate 格納ファイルの更新日付 struct { unsigned ft_day : 5; unsigned ft_month : 4; unsigned ft_year : 7; } _DosDate; ft_year に格納される値は 1980 年からの経過 年数です。したがって,理論的には 2107 年ま で表現できることになります。 wTime 格納ファイルの更新時刻。 struct { unsigned ft_tsec : 5; unsigned ft_min : 6; unsigned ft_hour : 5; } _DosTime; ft_tsec に格納される値が秒を 2 で割ったも のである点に注意してください。 szFileName 格納ファイル名 szAttribute 格納ファイルの属性 szMode "-gzip-", "-bzip2-" または "-store-"( 無圧縮 ) ======================================================================= メッセージ系 API ======================================================================= ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaSetOwnerWindow( const HWND hWnd ) ----------------------------------------------------------------------- 順序数 90 機能 BGA32.DLL のメッセージの送信先ウィンドウを設定します。BGA32.DLL は ここで指定されたウィンドウに wm_arcextract メッセージを送信します。 戻り値 正常終了の場合 TRUE を返します。 既にこの API で別のウィンドウが設定されている場合には FALSE を返します。 ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaClearOwnerWindow() ----------------------------------------------------------------------- 順序数 91 機能 BgaSetOwnerWindow() で設定したウィンドウの設定を解除します。 戻り値 正常終了の場合 TRUE を返します。 エラーがあれば FALSE を返します。 ----------------------------------------------------------------------- wm_arcextract メッセージ ----------------------------------------------------------------------- 機能 wm_arcextract メッセージを受け取ることにより、BGA32.DLL がこれから 処理する格納ファイルの情報を得ることができます。 wm_arcextract メッセージを使用する場合には RegisterWindowMessage() で システムに登録した上で使用してください。 wm_arcextract メッセージのパラメータ iMode = (int)wParam /* 通知モード */ 0 : 該当ファイルの処理を開始することを表します。 1 : 該当ファイルの処理中であることを表します。 2 : 処理を終了しようとしていることを表します。 3 : 該当書庫の処理を開始することを表します。 szSourceFileName に書庫名が格納されます。 pEis = (EXTRACTINGINFO FAR *)lParam /* 構造体を指すポインタ */ 戻り値 このメッセージを処理するアプリケーションは、0 を返さなければなりません。 反対に 0 以外を返すことにより、BGA32.DLL に処理を中止させられます。 ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaSetOwnerWindowEx( HWND hWnd, LPARCHIVERPROC pArcProc ) ----------------------------------------------------------------------- 順序数 51 機能 BGA32.DLL の処理状況を受け取るためのコールバック関数の指定を行います。 pArcProc に NULL を指定すると BgaSetOwnerWindow() と同等の処理を 行います。 戻り値 正常終了の場合 TRUE を返します。 既にこの API で別のウィンドウが設定されている場合には FALSE を返します。 ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaKillOwnerWindowEx( HWND hWnd ) ----------------------------------------------------------------------- 順序数 52 機能 BgaSetOwnerWindowEx() で設定したウィンドウの設定を解除します。 戻り値 正常終了の場合 TRUE を返します。 エラーがあれば FALSE を返します。 ----------------------------------------------------------------------- コールバック関数の定義 ----------------------------------------------------------------------- typedef BOOL CALLBACK ARCHIVERPROC( HWND hWnd, UINT uMsg, UINT uState, LPEXTRACTINGINFOEX pEis ) hWnd BgaSetOwnerWindowEx で指定したウィンドウハンドルが渡されます。 uMsg 現在のところは wm_arcextract となります。 uState BGA32.DLL の状態を表す以下の値が格納されます。 ( wm_arcextract メッセージのパラメータ wParam と同義です ) 0 : 該当ファイルの処理を開始することを表します。 1 : 該当ファイルの処理中であることを表します。 2 : 処理を終了しようとしていることを表します。 3 : 該当書庫の処理を開始することを表します。 szSourceFileName に書庫名が格納されます。 pEis EXTRACTINGINFOEX 構造体へのポインタです。 格納ファイルに 関する情報が得られます。 戻り値 ARCHIVERPROC は BGA32.DLL に処理を継続させるときは TRUE、 中止させるときは FALSE を返さなければなりません。 ※戻り値は wm_arcextract メッセージとは逆である点に注意してください。 ----------------------------------------------------------------------- EXTRACTINGINFO の構造 ----------------------------------------------------------------------- 構造体定義 typedef struct { DWORD dwFileSize; DWORD dwWriteSize; char szSourceFileName[FNAME32_MAX + 1]; char dummy1[3]; char szDestFileName[FNAME32_MAX + 1]; char dummy[3]; } EXTRACTINGINFO ; メンバの説明 dwFileSize 格納ファイルのオリジナルサイズ dwWriteSize 格納・展開処理で書き込んだサイズ szSourceFileName 処理を行う格納ファイル名 szDestFileName 実際に書き込まれるパス名 ----------------------------------------------------------------------- EXTRACTINGINFOEX の構造 ----------------------------------------------------------------------- 構造体定義 typedef struct { EXTRACTINGINFO exinfo; DWORD dwCompressedSize; DWORD dwCRC; UINT uOSType; WORD wRatio; WORD wDate; WORD wTime; char szAttribute[8]; char szMode[8]; } EXTRACTINGINFOEX; exinfo EXTRACTINGINFO 構造体が格納されます。 dwCompressedSize 格納ファイルの圧縮サイズ。 dwCRC BGA32.DLL では常に 0 です。 uOSType BGA32.DLL では常に 0 です。 wRatio パーミル (千分率) による格納ファイルの圧縮率。 wDate 格納ファイルの更新日付。 struct { unsigned ft_day : 5; unsigned ft_month : 4; unsigned ft_year : 7; } _DosDate; ft_year に格納される値は 1980 年からの経過 年数です。したがって,理論的には 2107 年ま で表現できることになります。 wTime 格納ファイルの更新時刻。 struct { unsigned ft_tsec : 5; unsigned ft_min : 6; unsigned ft_hour : 5; } _DosTime; ft_tsec に格納される値が秒を 2 で割ったも のである点に注意してください。 szAttribute 格納ファイルの属性 szMode "-gzip-" または "-bzip2-" ------------------------------------------------------------------------ 処理の流れ ------------------------------------------------------------------------ 1.iMode 3 でメッセージを送出。書庫名を得られる。 2.iMode 0 でメッセージを送出。格納ファイル名等を得られる。 3.iMode 1 でメッセージを送出。書き込みサイズが得られる。 そのファイルについての処理が終了するまでこのメッセージを送出。 すべての処理が終了した時点( 状況表示を消すタイミング )で、 4.iMode 2 でメッセージを送出。 ======================================================================= EnumMembersProc 系 API ======================================================================= ----------------------------------------------------------------------- ○ BOOL WINAPI BgaSetEnumMembersProc( UNLHA_WND_ENUMMEMBPROC pEnumProc ) ----------------------------------------------------------------------- 順序数 99 機能 BGA32.DLL が呼び出すコールバック関数の登録を行います。 引数 pEnumProc BGA32.DLL が呼び出すコールバック関数へのポインタ。 戻り値 正常に登録が行われた場合は TRUE を返します。 登録に失敗した場合は FALSE を返します。 ----------------------------------------------------------------------- ◎ BOOL WINAPI BgaClearEnumMembersProc() ----------------------------------------------------------------------- 順序数 100 機能 BgaSetEnumMembersProc() で行った関数の登録を解除します。 戻り値 正常に解除が行われた場合は TRUE を返します。 解除に失敗した場合は FALSE を返します。 ----------------------------------------------------------------------- BOOL CALLBACK UNLHA_WND_ENUMMEMBPROC( LPUNLHA_ENUM_MEMBER_INFO pInfo ) ----------------------------------------------------------------------- 機能 書庫の情報を受け取るための、アプリケーションで定義されたコールバック 関数です。 格納ファイル名等の指定を細かく行いたい場合などでの使用を本来の目 的としているため、Bga() で指定されたスイッチ等を反映して検索を 行った結果マッチしたものについてのみ、ここで指定したコールバック 関数が呼ばれる仕様となっています。 引数 pInfo 書庫のメンバの情報を格納した構造体へのポインタ。この構造体の 情報を書き換えた上で TRUE を返すことで BGA32.DLL に処理を行わせる ことができます。 戻り値 TRUE pInfo の情報に従って BGA32.DLL に処理を行わせます。 FALSE BGA32.DLL に当該メンバの処理をスキップさせます。 ----------------------------------------------------------------------- UNLHA_ENUM_MEMBER_INFO の構造 ----------------------------------------------------------------------- 構造体定義 struct { DWORD dwStructSize; UINT uCommand; DWORD dwOriginalSize; DWORD dwCompressedSize; DWORD dwAttributes; DWORD dwCRC; UINT uOSType; WORD wRatio; FILETIME ftCreateTime; FILETIME ftAccessTime; FILETIME ftWriteTime; char szFileName[FNAME_MAX32 + 1]; char dummy1[3]; char szAddFileName[FNAME_MAX32 + 1]; char dummy2[3]; } UNLHA_ENUM_MEMBER_INFO, *LPUNLHA_ENUM_MEMBER_INFO; メンバの説明 dwStructSize この構造体のサイズが格納されています。値を 書き換えないでください。 uCommand Bga() がどの命令を処理中かを示します。 UNLHA_RENAME_COMMAND n 命令 現状では n 命令以外は対応していません。 dwOriginalSize 現状は常に 0 です。 dwCompressedSize 現状は常に 0 です。 dwAttributes 現状は常に 0 です。 dwCRC 現状は常に 0 です。 uOSType 現状は常に 0 です。 wRatio 現状は常に 0 です。 ftCreateFile 現状は常に 0 です。 ftAccessTime 現状は常に 0 です。 ftWriteTime 現状は常に 0 です。 szFileName 変更するファイル名をパスを含めて指定します。 szAddFileName 現状は常に 0 です。 ======================================================================= API の返すエラーコード ======================================================================= ERROR_FILE_OPEN ファイルを開けませんでした。 ERROR_MAKEDIRECTORY ディレクトリが作成できません。 ERROR_CANNOT_WRITE 書き込みエラーが生じました。 ERROR_HEADER_CRC 書庫のヘッダのチェックサムが合っていません。 ERROR_ARC_FILE_OPEN 書庫を開く事が出来ません。 ERROR_NOT_ARC_FILE 書庫のファイル名が指定されていません。 ERROR_CANNOT_READ ファイルの読み込み時にエラーが生じました。 ERROR_FILE_STYLE 指定されたファイルは有効な書庫ではありません。 ERROR_COMMAND_NAME コマンド指定が間違っています。 ERROR_MORE_HEAP_MEMORY 作業用のためのヒープメモリが不足しています。 ERROR_ALREADY_RUNNING 既に BGA32.DLL が動作中です。 ERROR_USER_CANCEL ユーザーによって処理を中断されました。 ERROR_TMP_OPEN 作業ファイルが作成できません。 ERROR_ARC_READ_ONLY 書き込み専用属性の書庫に対する操作はできません。 ERROR_NOT_FIND_ARC_FILE 指定されたディレクトリには書庫がありませんでした。 ERROR_RESPONSE_READ レスポンスファイルの読み込み時にエラーが生じました。 ERROR_TMP_COPY 作業ファイルの書庫への書き戻しができませんでした。 ERROR_NOT_FIND_FILE ファイルが見つかりません。 ERROR_GET_ATTRIBUTES ファイル属性が取得できません。 ERROR_GET_INFORMATION ファイル情報が取得できません。 =======================================================================