ZpArchive

以前、ライブラリ系だと、libjpeg、zlib、libpng、と一緒に、Info-ZIPも試したことがあったが、今回改めて試すと、非常に大変なことがわかった。

Info-ZIP Home Page

今回は、zipへの圧縮を行う。

Info-ZIPのトップページ
Info-ZIPのトップページ

Info-ZIPのトップページに行って、
Zipのリンクを押すと、

Zipのトップ
Zipのトップ

Zipのトップ。
source codeを押すと、

みんなFROZENで落とせない。
みんなFROZENで落とせない。

みんなFROZENで落とせない。

結局sourceforgeに飛ばざるを得ない
結局sourceforgeに飛ばざるを得ない

結局sourceforgeに飛ばざるを得ない。

Info-ZIP's Zip

sourceforge
sourceforge

sourceforge

もう、わかってるとおもいますが、最初Linuxでやろうとおもいましたが、Info-ZIPはLinux版はzipやunzipのツールのみ提供で、DLLとかライブラリとして使えるビルドを持ってるのはWindows版だけみたいなんですよねえ、調べたけどLinuxはみつからず。

そして、そのあと実は、上の写真のZip 3.x(latest)でも試したんですが、windllのdllやexampleが、dswとかdsp形式のプロジェクトで、おそらくVisualC++6.0プロジェクトとかかなり古いんですよねえ。

実際ビルドすると失敗し、いろいろいじったけど断念。
現在だと、Unreleased Betasが妥当かなと。

Zip betas
Zip betas

Zip betasの、

zip31c
zip31c

zip31c.zipが、なんとか動かせそう。
ダウンロードしたら、zipを解凍して、

配置
配置

配置。
ライブラリ系はだいたいC直下。

windll
windll

windll。

vc8
vc8

vc8。

DLLのソリューションファイル
DLLのソリューションファイル

DLLのソリューションファイル。

サクッとビルドできた。
サクッとビルドできた。

3.0のdsw/dsp版(VC6?版)だとエラーが酷かったんですが、3.1cのこれだとサクッとビルドできた。

releaseも問題なく
releaseも問題なく

releaseも問題なく。

example、これを見ないとわからない。
example、これを見ないとわからない。

個人的な感想ですが、Info-ZIPのライブラリとしての情報って探しても全然無いので、example、これを見ないとわからない。

これもvc8を選ぶ
これもvc8を選ぶ

これもvc8を選ぶ。

これを起動
これを起動

これを起動。

これもビルドができた
これもビルドができた

これもビルドができた。

releaseも
releaseも

releaseも。

実はlib版もある
実はlib版もある

これはexampleの方だけど、実はwindllもexampleもDLL版だけじゃなくて、lib版もあってそれもビルドできそうだったのだが、結局ビルドエラーで断念した。

まあマルチバイトにしないといけないとかね
まあマルチバイトにしないといけないとかね

まあマルチバイトにしないといけないとかね。
まあ、ここはあんまり関係ないんだけど。

VC8用なのにこういうとこおかしい。VC6になってる

VC8用なのにこういうとこおかしい。VC6になってる。

これ元は追加の依存ファイルにlibがなかった。ので追加した。
これ元は追加の依存ファイルにlibがなかった。ので追加した。

これ元は追加の依存ファイルにlibがなかった。ので追加した。
releaseでもやったけど、

それでもダメだった。
それでもダメだった。

それでもダメだった。

DLLに戻る
DLLに戻る

DLLに戻る。
今回、releaseのDLLを使う。

新規のプロジェクトとして作成
新規のプロジェクトとして作成

新規のプロジェクトとして作成。

毎度の空プロコンソール
毎度の空プロコンソール

毎度の空プロコンソール。

とりあえずはcppで
とりあえずはcppで

とりあえずはcppで。

プロパティでマルチバイト文字セット
プロパティでマルチバイト文字セット

プロパティでマルチバイト文字セット。

releaseも
releaseも

releaseも。

[[ツール]-[オプション]]
[ツール]-[オプション]

[ツール]-[オプション]。

インクルード
インクルード

インクルードにzip31cのパス。

DLLはライブラリのここに
DLLはライブラリのここに

DLLはライブラリのここに。

インクルードはここも追加
インクルードはここも追加

DLL用のヘッダもあるので、インクルードはここも追加。

DLLをEXEの横に
DLLをEXEの横に

DLLをEXEの横に。

releaseにも
releaseにも

releaseにも。

main.cppだからextern "C"とかいろいろやったけど治まらず
main.cppだからextern "C"とかいろいろやったけど治まらず

main.cppだからextern "C"とかいろいろやったけど治まらず。

今回は時間ないのでmain.cに変えた。
今回は時間ないのでmain.cに変えた。

今回は時間ないのでmain.cに変えた。

test.txtを準備
test.txtを準備

test.txtを準備。

こんな感じにしておく
こんな感じにしておく

こんな感じにしておく。

パス周りの処理でshlwapi追加
パス周りの処理でshlwapi追加

パス周りの処理でshlwapi追加。

やってることはたいしたことなくて、ユーザ関数とかはどうでもよくて、LoadLibraryして、ZpInitとかZpArchiveとかのポインタを取得して、ZpOptとかをセットして、ZpArchiveの関数ポインタ参照呼出しでtest.txtを圧縮してる。

エラーじゃなかったらOKなんだけど、ファイルがなかったりでもOKなのでちょっとねえ・・・。
エラーじゃなかったらOKなんだけど、ファイルがなかったりでもOKなのでちょっとねえ・・・。

エラーじゃなかったらOKなんだけど、ファイルがなかったりでもOKなのでちょっとねえ・・・。。

なんとかtest.zipができた
なんとかtest.zipができた

なんとかtest.zipができた。

開けるとtest.txtを復元できてる
開けるとtest.txtを復元できてる

開けるとtest.txtを復元できてる。
releaseでも同様にできた。
コードはまあそこまで大変じゃないけど、とにかく調べるのと環境作るのがねえ・・・。
ちなみにVS2017でもexampleで圧縮できたので、vc8以降はなんとか・・・。

Sample/info-zip/ZpArchive/ZpArchive/src/ZpArchive at master · bg1bgst333/Sample · GitHub