2011/05/28 更新
undll.exe Ver.2.04 Copyright (C) 1999-2011 K.Takata 1.概要 unlha32.dll, unzip32.dll などをコマンドラインから呼び出せるように するためのソフトです。 同種のソフトに unlha.exe, lha32 などがありますが、undll.exe はそれ らとは違い、unlha32.dll だけでなく統合アーカイバ (*1) API 仕様に準拠 した DLL ならばどれでも、設定ファイルを書くだけで対応が可能となって います。また実行ファイルのサイズがわずか 2,048bytes と非常に小さいこ とも特徴です。 また、他のソフトでは、実行結果を受け取るためのバッファを 数KB 程度 しか確保していないものも多いですが、undll.exe では、数MB 単位のバッ ファを確保していますので、実行結果を確実に取得することができます。 現時点での正式対応 DLL は以下の通りです。 unlha32.dll, unzip32.dll, zip32j.dll, unarj32j.dll, tar32.dll, cab32.dll, unrar32.dll, ish32.dll, ftp32.dll, unkanji.dll, bga32.dll, jack32.dll, unbel32.dll, aish32.dll, aishmv32.dll, ungca32.dll, yz1.dll, 7-zip32.dll, unimp32.dll, unacev2j.dll, unhki32.dll, uniso32.dll (*1) 統合アーカイバプロジェクト (Common Archivers Library) http://www.csdinc.co.jp/archiver/ http://www.madobe.net/archiver/ 2.動作環境 ・OS Windows95/98/2000/XP/Vista/7 など ・その他必要なもの unlha32.dll など、統合アーカイバ API 仕様に準拠した DLL 3.使用方法 3.1. インストール undll.exe, undll.ini, DLLs.bat を PATH の通ったディレクトリにコピ ーしてから、DLLs.bat を実行してください。(DLLs.bat に関しては 3.2. も参照してください。) 注) Ver.2.00 からは、実行ファイルの他に設定ファイル (undll.ini) が必要になりました。 3.2. 基本的な使用方法 undll.exe は自身のファイル名および、実行ファイルと同じディレクトリ に置いてある undll.ini の内容から、どの DLL を呼び出すかを判断してい ます。基本的には undll.exe を、呼び出したい DLL の拡張子を exe に変 えたファイル名にリネームすると、その DLL を呼び出すようになります。 例えば undll.exe を unlha32.exe にリネームすると unlha32.dll を呼び 出し、unzip32.exe にリネームすれば unzip32.dll を呼び出します。例外 的に zip32j.dll, unarj32j.dll, unacev2j.dll に関しては、最後の j を 付けても付けなくても呼び出せるようになっています。具体的には zip32.exe でも zip32j.exe でもどちらでも zip32j.dll が呼び出せます。 付属の DLLs.bat を実行すると、undll.exe が対応しているそれぞれの DLL を呼び出すための実行ファイルが生成されます。 WinNT 系で NTFS を使っており、ln コマンドが使える場合には、 > Dlls -ln というように実行すると、undll.exe へのハードリンクを作成するので、デ ィスク容量を節約することができます。 WinNT 用の ln コマンドにはいくつかの実装がありますが、角藤版 TeX のインストーラ (*2) に同梱されている ln.exe や、「ハードリンク/ジャ ンクション作成ツール」(*3) などがあります。また私自身は未確認ですが、 Win2k リソースキットなどにも ln コマンドが含まれているようです。 (*2) ftp://akagi.ms.u-tokyo.ac.jp/pub/TeX/win32/ texinst???.zip (*3) http://homepage1.nifty.com/emk/symlink.html なお、DLLs.bat に -clean オプションを指定して、 > DLLs -clean というように実行すると、DLLs.bat で作成した undll.exe のコピー(ハー ドリンク)をまとめて削除することができます。 undll.exe は、渡されたコマンドラインをそのまま各アーカイバ DLL に 渡しているだけですので、コマンドラインの書式は各 DLL に依存します。 コマンドラインの書式などは各 DLL に付属のドキュメントを参照してくだ さい。(例えば、unlha32.dll の場合には、command.txt にコマンドライン の書式が書かれています。) undll.exe を引数を付けずに実行した場合には、undll.ini で指定したヘ ルプ用のファイルが表示されます。(詳細は 4.を参照) (使用例) undll.exe を unlha32.exe にリネームして、 > unlha32 l undll.lzh とすると、undll.lzh に含まれているファイルの一覧が表示されます。 (当然 unlha32.dll が正しくインストールされている必要があります。) > unlha32 l undll.lzh | more とすると表示が崩れる場合がありますが、これは仕様です。実行ファイル のサイズを小さくするために、本来必要な改行コードの変換(\n → \r\n) を行っていないのが原因です。more の代わりに miel, less, lv などを 使えば正しく表示されます。 > unlha32 p undll.lzh undll.txt | more とした場合は、逆に余計な改行コードの変換は行わないために、正しく表 示されます。 以下のように、引数を付けずに実行するとヘルプが表示されます。 > unlha32 > unlha32 | more 4.設定ファイル (undll.ini) 前述のように、undll.exe は、実行ファイルと同じディレクトリにある undll.ini の内容を読み込んで動作します。ここでは、undll.ini を編集し て、新しい統合アーカイバ DLL に対応させたり、引数無しで起動したとき に表示されるヘルプファイルを指定する方法を説明します。 undll.ini は以下の2つのいずれかの形式のセクションを羅列したものと なっています。 1) [<セクション名>] DLL=<DLL 名> Proc=<メイン関数名> help=<ヘルプファイルのパス> bufsiz=<バッファサイズ> 2) [<セクション名>] ref=<参照先セクション名> <セクション名> には、実行ファイルのベース名(実行ファイルの名前か ら、拡張子を取り除いた部分)を指定します。undll.exe は、実行ファイル のベース名と一致するセクションに書かれた設定を参照します。例えば、 unlha32.exe の場合は、unlha32 となります。大文字小文字は区別されませ ん。 <DLL 名> は、呼び出す DLL の名前です。例えば、unlha32.dll となりま す。大文字小文字は区別されません。 <メイン関数名> は、統合アーカイバ DLL のメイン関数名です。例えば unlha32.dll の場合は、Unlha となります。大文字小文字が区別されますの で注意してください。 <ヘルプファイルのパス> は、引数無しで実行したときに表示されるヘル プファイルのパスを指定します。ヘルプファイルはテキストファイルでなけ ればなりません。このファイルには、各 DLL に同梱されている、コマンド ライン書式の説明が書かれたファイルを指定しておくと便利でしょう。例え ば、unlha32.dll では、command.txt がこれに相当します。ただ、 unlha32.dll の command.txt はサイズが大きいので、自分で簡潔にまとめ たヘルプファイルを用意しておくのも良いでしょう。<ヘルプファイルのパ ス> を相対パスで記述した場合には、カレントディレクトリからの相対パス となるので注意してください。実行ファイルのあるディレクトリからの相対 パスで記述する際には、パスの先頭に、> を付け加えてください。 同梱の undll.ini の場合、undll.exe のあるディレクトリに、DLL のベ ース名と同じ名前のディレクトリを作り、その中に各 DLL のアーカイブフ ァイルを展開したというディレクトリ構造を想定しています。このディレク トリ構造を再現すれば、引数無しで起動した場合には、そのままでコマンド ラインの使用方法を表示することができます。ディレクトリ構造が異なる場 合には、環境に合わせて <ヘルプファイルのパス> を書き換えてください。 表示されるヘルプファイルのサイズは、256KiB までとなっています。 <バッファサイズ> は、DLL からの結果を受け取るバッファのサイズをバ イト単位で指定します。デフォルト値は 4194304 (4MiB)、最小値は 262144 (256KiB) となっています。大量のファイルを含むアーカイブファイルを扱 うときに、ログが途中で切れてしまう場合、バッファサイズを増やしてみて ください。 2) の書式は、別の実行ファイル名の場合の設定をそっくりそのまま参照 したい場合に使います。<参照先セクション名> は、設定を参照する先のセ クション名(実行ファイルのベース名)を指定します。大文字小文字は区別 されません。例えば、 [lha32] ref=unlha32 というように記述すると、undll.exe を lha32.exe にリネームして起動し た際には、unlha32.exe として起動された場合と同じように振る舞うという ことを意味します。なお、参照先のセクションは、1) の形式になっていな ければなりません。(参照のネストはできません。) 実行ファイルと同じディレクトリに undll.ini が無い場合や、undll.ini に実行ファイルのベース名と一致するセクションが無い場合には、 undll.exe は、実行ファイルのベース名と同じベース名を持つ DLL をロー ドしようとします。このとき、DLL のメイン関数名が分からないので、順序 数 (ordinal) を使ってメイン関数を取得しようとします。メイン関数の順 序数が 1 の DLL ならば、これでも正しく実行できます。 メイン関数の順序数が 1 ではない DLL は、undll.ini にメイン関数名を 記述することが必須となります。具体的には、tar32.dll, ftp32.dll, unkanji.dll, aish32.dll, aishmv32.dll, unimp32.dll などがこれに相当 します。 5.更新履歴 1999/09/13 Ver.1.00 ・最初の公開バージョン。 1999/09/28 Ver.1.01 ・細かなバグ修正。 ・実行ファイルサイズの限界に挑戦。(1,536bytes) 1999/11/23 Ver.1.02 ・バッファサイズを 512KB に拡大。 2000/01/19 Ver.1.03 ・bga32.dll, jack32.dll に対応した(はず)。それに伴って実行ファ イルのサイズが大きくなってしまった。(2,048bytes) 2000/01/21 Ver.1.04 ・WinNT で動作しないことがあるバグを修正した(はず)。実行ファイ ル名のチェック方法が手抜きだったのが原因。 2000/01/27 Ver.1.05 ・WinNT で動作しないバグを修正した(はず)。Ver.1.04 では余計な ことをしたために逆にバグがひどくなっていた。(^^;; 2000/03/08 Ver.1.06 ・バッファサイズを 1.5MB に拡大。 2000/09/05 Ver.1.07 ・unbel32.dll, aish32.dll, aishmv32.dll に対応した(はず)。 2001/01/01 Ver.1.08 ・日本語ファイル名をうまく扱えない場合があったのを修正。 2002/01/01 Ver.1.09 ・ungca32.dll, yz1.dll に対応した。 2002/07/03 Ver.1.10 ・7-zip32.dll に対応した。 2002/10/19 Ver.1.11 ・unimp32.dll に対応した(はず)。 2004/08/13 Ver.1.12 ・bh32.dll に対応した。 2004/10/05 Ver.1.13 ・yz2.dll に対応した。 2004/12/25 Ver.2.00 ・メジャーバージョンアップ。 ・unacev2j.dll に対応した(はず)。 ・対応から外してあった、ftp32.dll, unkanji.dll にも再対応。 ・設定ファイル (undll.ini) で、対応 DLL を増やせるように変更。 ・ヘルプを表示できるように変更。 ・バッファサイズを 4MiB に拡大。 ・実行結果のサイズが大きいときに、WinNT 系で実行結果が全く表示さ れないことがあったのを修正。 2005/01/28 Ver.2.01 ・noa32w.dll に対応した。 2005/10/26 Ver.2.02 ・unhki32.dll, dz32.dll, ha32.dll, unpma32.dll に対応した。 2005/11/13 Ver.2.03 (非公開) ・バッファサイズを undll.ini で指定できるようにした。 2011/05/28 Ver.2.04 ・UnIso32.dll に対応した。 ・ライセンス上の問題から BH32.dll, YZ2.dll, NOA32w.dll, Dz32.dll, Ha32.dll, UnPma32.dll を対応から外した。(必要な方は undll.ini を修正してください。) ・avast! 6.0 が、安全でないアプリとして警告を出すのに対処した。 6.注意事項、その他 ・このプログラムはフリーソフトウェアです。 ・このプログラムの著作権は作者である私 K.Takata(高田 謙)に帰属しま す。 ・もしこのプログラムを使用することで何らかの問題が発生しても作者はい っさいの責任を負いません。各自の責任で使用してください。 ・アーカイブを変更しない限り配布/転載は自由です。 ・ソースファイルの使用は非商用に限り自由です。 作者 : K.Takata(高田 謙) URL : http://webs.to/ken/ http://homepage3.nifty.com/k-takata/