レガシー Windows API(概要)について

ここで紹介しているAPIは、Windows95、Windows NT3.5時代のAPI群であり、最新のAPIは含まれていないことに注しして欲しい。なお、当時の解説書は現在よりもより詳細に解説しているため、参考になるはずである。

  • レイアウトを変換する際、崩れているページがあります。
  • 概要およびSampleコードはありますが、APIの解説はありません。

ご要望があれば旧版のWin32 API(HELP形式)をお譲りします。問い合わせフォームより申し込みください。

Windows API データ圧縮解除ライブラリの概要

Microsoft(R) Windows(TM) オペレーティング システムには、 LZEXPAND.DLLという名前のダイナミック リンク ライブラリ (DLL) があります。Microsoftファイル圧縮ユーティリティ (COMPRESS.EXE) で圧縮されたデータを圧縮解除するには、 LZEXPAND.DLLの関数を呼び出します。

このトピックでは、 データ圧縮に関する重要な概念と、 LZEXPAND.DLLの圧縮解除関数について説明します。

次に示すトピックでは、 Win32のデータ圧縮について説明しています。

データ圧縮

データ圧縮解除

データ圧縮解除ライブラリの使用

単一のファイルの圧縮解除

複数のファイルの圧縮解除

圧縮ファイルからのバイトの読み取り

データ圧縮解除ライブラリ関数

データ圧縮

データ圧縮とは、 冗長なデータを最小限に抑えることによってファイルのサイズを減らす操作です。テキストを含むファイルの場合、 空白文字やeaなどのよく使われる母音などの、 頻繁に出現する文字が冗長なデータです。また、 頻繁に出現する文字列も冗長なデータです。データ圧縮では、 このような冗長なデータを最小限に抑えることによってファイルを圧縮します。

各種のデータ圧縮アルゴリズムは、 それぞれの方法で冗長なデータを最小限にします。たとえば、 Huffman符号化 アルゴリズムでは、 ファイル内で特定の文字が出現する頻度に基づいて、 文字にコードを割り当てます。また、 ラン レングス符号化と呼ばれる圧縮アルゴリズムでは、 繰り返し出現する文字に対して2つの値を生成します。1つ目の値はその文字が繰り返される回数を示し、 2つ目の値はその文字自体を識別します。Lempel-Zivアルゴリズムと呼ばれているアルゴリズムでは、 可変長の文字列を元の文字列よりも短い固定長のコードに変換します。

大きなアプリケーションやデータ ファイルを圧縮するには、 コマンド ラインからCOMPRESS.EXEを実行してください。COMPRESS.EXEは、 Lempel-Ziv圧縮アルゴリズムを使用しています。

データ圧縮解除

COMPRESS.EXEで圧縮されているファイルを圧縮解除するには、 LZEXPAND.DLLの関数を呼び出します。この関数は、 圧縮されていないファイルに対しては圧縮解除を行わずに処理することができます。この関数を使うには、 アプリケーションにLZEXPAND.Hヘッダー ファイルをインクルードしてください。

LZEXPAND.DLLの各関数を次の表に示します。

関数 目的

CopyLZFile この関数は使われなくなりました。16ビット バージョンのWindowsとの互換にだけ提供されます。Win32アプリケーションの作成には、 LZCopy関数を使ってください。

GetExpandedName ファイルを圧縮するときに/rオプションが使われている場合に、 圧縮されているファイルの元の名前を取得します。

LZClose LZOpenFile関数でオープンされたファイルをクローズします。

LZCopy 転送元ファイルを転送先ファイルにコピーします。転送元ファイルが圧縮されているときは、 圧縮解除した転送先ファイルを作成します。転送元ファイルが圧縮されていないときは、 元のファイルを複製します。この関数は、 単一ファイルのコピー操作用です。

LZDone この関数は使われなくなりました。16ビット バージョンのWindowsとの互換にだけ提供されます。Win 32ベースのアプリケーションの作成には、 LZOpen関数を使ってください。

LZInit ファイルを圧縮解除するために使われる構造体を作成します。

LZOpenFile ファイルをオープンして、 そのファイルを識別するハンドルを返します。

LZRead 指定されたバイト数をファイルから読み取ります。ファイルが圧縮されているときは、 データを圧縮解除してから転送先バッファにコピーします。

LZSeek 圧縮されているファイルを圧縮解除したイメージのなかでファイル ポインタの位置を設定します。LZRead関数を呼び出す前に、 この関数を呼び出してポインタの位置を設定します。

LZStart この関数は使われなくなりました。16ビット バージョンのWindowsとの互換にだけ提供されます。Win32ベースのアプリケーションの作成にはLZWriteLZCopyを使ってください。

データ圧縮解除ライブラリの使用

LZEXPAND.DLLの関数は、 単一のファイルまたは複数のファイルを圧縮解除するために使われます。また、 圧縮されているファイルの一部を圧縮解除するためにも使われます。

単一ファイルの圧縮解除

単一の圧縮ファイルを圧縮解除するには、 次に示す作業を行います。

1.LZOpenFile関数を呼び出して、 転送元ファイルをオープンします。

2.LZOpenFileを呼び出して、 転送先ファイルをオープンします。

3.LZOpenFileが返したハンドルを渡してLZCopy関数を呼び出し、 転送元ファイルを転送先ファイルにコピーします。

4.LZClose関数を呼び出して、 ファイルをクローズします。

複数のファイルの圧縮解除

複数のファイルを圧縮解除するには、 次に示す作業を行います。

1.LZOpenFile関数を呼び出して、 転送元ファイルをオープンします。

2.LZOpenFileを呼び出して、 転送先ファイルをオープンします。

3.LZCopy関数を呼び出して、 転送先ファイルに転送元ファイルをコピーします。

4.LZClose関数を呼び出して、 ファイルをクローズします。

圧縮ファイルからのバイトの読み取り

ファイル全体を1回の操作で圧縮解除するほかに、 LZSeek関数とLZRead関数を使って、 圧縮されているファイルの一部だけを圧縮解除できます。これらの関数は、 大きなファイルの一部だけを抽出しなければならないときに特に役立ちます。たとえば、 フォント メーカーでは、 文字データのほかにフォント メトリックスを含むファイルを持っています。そのようなファイルの情報を使用するときは、 ファイルを圧縮解除しなければなりません。しかし、 ほとんどの場合、 必要なのはファイルの一部だけです。フォント メトリックに関する情報を取得するには、 ヘッダーからデータを抽出します。テキストから情報を取得するには、 LZSeekを呼び出してファイル ポインタの位置を設定し、 LZReadを呼び出して文字データを抽出します。

データ圧縮解除ライブラリ関数

ファイルの圧縮解除に使われる関数を次に示します。

GetExpandedName

LZClose

LZCopy

LZInit

LZOpenFile

LZRead

LZSeek

使われなくなったか、 または削除された関数

CopyLZFile

LZDone

LZStart

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします
inserted by FC2 system