EternalWindows
Cabinet API / FCIとFDI

キャビネットファイルとは、.cabの拡張子を持つ圧縮ファイルのことで、 アプリケーションはこのファイルの作成や展開を Cabinet APIを通じて行うことができます。 Cabinet APIは、ファイルを圧縮するための関数群をFCI(File Compression Interface)、 キャビネットファイルを展開する関数群をFDI(File Decompression Interface)とし、 それぞれのヘッダーファイルやライブラリファイルを用意しています。 アプリケーションは、Cabinet API(FCI/FDI)を呼び出すことで、 キャビネットファイルの詳細を意識せずに、 圧縮や展開の機能を組み込むことができます。 主要となる各種ファイルを次に示します。

ファイル 説明
fci.h キャビネットファイルを作成するための関数が定義されている。
fdi.h キャビネットファイルを展開するための関数が定義されている。
fci.lib キャビネットファイルを作成するための関数コードが実装されている。 FCIの関数をスタティックリンクして利用するつもりがない場合は不要。
fdi.lib キャビネットファイルを展開するための関数コードが実装されている。 FDIの関数をスタティックリンクして利用するつもりがない場合は不要。
cabinet.dll FCIとFDIの各関数が実装されている。 これらの関数をダイナミックリンクして利用するつもりがない場合は不要。
cabinet.lib cabinet.dllに対するインポートライブラリ。

Windowsアプリケーションの開発者向けに用意されているPlatform SDKには、 上記のヘッダーファイルとライブラリファイルはSDKに同梱されています。 また、Windows95/NT以外のOSには、system32フォルダにcabinet.dllが最初から存在しています。 したがって、これら全てのファイルが既に揃っている環境については、 Cabinet APIを利用するアプリケーションを直ぐに開発することができます。 必要なファイルが存在していない場合は、 後述するCabinet SDKをダウンロードしてください。

Cabinet APIは、通常のWidowsAPIとして公開されている以外に、 スタティックリンク可能なライブラリとしても提供されています。 このファイルにリンクした場合、exeファイルにコードが埋め込まれる関係上、 ファイルサイズが大きくなってしまうことになりますが、 コンソールアプリケーションを作成するときなどは、 外部DLLに依存しない設計にするという点で有効な手段といえます。 なお、Cabinet APIはUNICODEをサポートしていないため、 関数に指定する文字列はchar型でなければなりません。

Cabinet SDKについて

Platform SDKをインストールしていない場合や、 cabinet.dllがsystem32フォルダに存在しない環境でもCabinet APIを使いたい場合は、 Cabinet SDKをダウンロードしてインストールすることになります。 Cabinet SDKは1997年に作成されたものであり、 現在のPlatform SDKに含まれる各種ファイルと比べて非常に古くなっていますが、 機能的に劣っているようなことはありません。 Cabinet SDKは、次のページにて公開されています。

http://support.microsoft.com/kb/310618/ja

ダウンロードされたcabsdk.exeを実行すると、インストール用のダイアログが表示されます。 手順としては、インストール先のパスを入力し、Unzipという名前のボタンを押すだけです。 パスについては、たとえばC:\Program Files\Cabinet SDKのようにしてもよいでしょう (ただし、Cabinet SDKというフォルダは予め作成しておきます)。 インストールが完了したら、Closeという名前のボタンを押して終了してください。

インストール先のパスには、BIN、DOCS、INCLUDE、LIB、SAMPLESの各フォルダが存在します。 BINは、キャビネット関係の処理を補足するツールとCABINET.DLLが含まれています。 CABINET.DLLは、FCI/FDI両者の関数を実装し、関数をダイナミックリンクして 利用したい場合には必要です。 DOCSは、キャビネットファイルのフォーマットや圧縮形式、 FCI/FDIのドキュメントが用意されています。 INCLUDEは、FCI.hとFDI.hが含まれています。 圧縮処理の必要なアプリケーションはFCI.hを、展開処理が必要なアプリケーションは FDI.hをそれぞれインクルードすることになります。 LIBは、FCI.LIBとFDI.LIBという2つのライブラリファイルが用意されています。 コンソールアプリケーションのように関数をスタティックリンクするアプリケーションは、 これらのライブラリを利用することになります。 SAMPLESは、FCI/FDIの使い方を示したソースファイルが含まれています。 Cabinet SDKにはCABINET.LIBが含まれていないため、 CABINET.DLLを扱う場合はDLLを明示的にロードし、関数のアドレスを取得します。



戻る