以前、ライブラリ系だと、libjpeg、zlib、libpng、と一緒に、Info-ZIPも試したことがあったが、今回改めて試すと、非常に大変なことがわかった。
今回は、zipへの圧縮を行う。
Info-ZIPのトップページに行って、
Zipのリンクを押すと、
Zipのトップ。
source codeを押すと、
みんなFROZENで落とせない。
結局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の、
zip31c.zipが、なんとか動かせそう。
ダウンロードしたら、zipを解凍して、
配置。
ライブラリ系はだいたいC直下。
windll。
vc8。
DLLのソリューションファイル。
3.0のdsw/dsp版(VC6?版)だとエラーが酷かったんですが、3.1cのこれだとサクッとビルドできた。
releaseも問題なく。
個人的な感想ですが、Info-ZIPのライブラリとしての情報って探しても全然無いので、example、これを見ないとわからない。
これもvc8を選ぶ。
これを起動。
これもビルドができた。
releaseも。
これはexampleの方だけど、実はwindllもexampleもDLL版だけじゃなくて、lib版もあってそれもビルドできそうだったのだが、結局ビルドエラーで断念した。
まあマルチバイトにしないといけないとかね。
まあ、ここはあんまり関係ないんだけど。
VC8用なのにこういうとこおかしい。VC6になってる。
これ元は追加の依存ファイルにlibがなかった。ので追加した。
releaseでもやったけど、
それでもダメだった。
DLLに戻る。
今回、releaseのDLLを使う。
新規のプロジェクトとして作成。
毎度の空プロコンソール。
とりあえずはcppで。
プロパティでマルチバイト文字セット。
releaseも。
[ツール]-[オプション]。
インクルードにzip31cのパス。
DLLはライブラリのここに。
DLL用のヘッダもあるので、インクルードはここも追加。
DLLをEXEの横に。
releaseにも。
main.cppだからextern "C"とかいろいろやったけど治まらず。
今回は時間ないのでmain.cに変えた。
test.txtを準備。
こんな感じにしておく。
パス周りの処理でshlwapi追加。
やってることはたいしたことなくて、ユーザ関数とかはどうでもよくて、LoadLibraryして、ZpInitとかZpArchiveとかのポインタを取得して、ZpOptとかをセットして、ZpArchiveの関数ポインタ参照呼出しでtest.txtを圧縮してる。
エラーじゃなかったらOKなんだけど、ファイルがなかったりでもOKなのでちょっとねえ・・・。。
なんとかtest.zipができた。
開けるとtest.txtを復元できてる。
releaseでも同様にできた。
コードはまあそこまで大変じゃないけど、とにかく調べるのと環境作るのがねえ・・・。
ちなみにVS2017でもexampleで圧縮できたので、vc8以降はなんとか・・・。
Sample/info-zip/ZpArchive/ZpArchive/src/ZpArchive at master · bg1bgst333/Sample · GitHub