いつもお世話になっております。
ブヒブヒでございます。
開発環境
WindowsXP SP3
Visual C++ 2005 SP1 MFC
VC++ 2005 MFCでzlib1.2.4を使用する方法を
教えていただけないでしょうか。
見よう見まねで組み込んでみたのですが、
LINKエラーが発生してビルドが成功しません。
zlibとMFCで使用しているDLLが異なっているため
のようですが私には解決方法がわかりませんでした。
#階層を保持したままファイルをアーカイブして
#リソースとしてExeに持たせ、実行時に
#任意のパスに解凍したいのです。
#特にzlibにこだわっているわけではないので
#他に良い方法があれば教えていただけないでしょうか。
大変申し訳ありませんが、
よろしくお願いいたします。
zlib1.dll をダイナミックリンクするのではなく、スタティックリンクしたいというこ
とでしょうか?
まず、 http://zlib.net/ から「zlib source code, version 1.2.4, zipfile format」
を落としてきて解凍します。
その中にある projects/visualc6/zlib.dsw を開いて変換します。
アクティブなソリューション構成を「LIB Release」にしてビルドをかければいいはずで
す。
ただ、zlib というのは、単にバイトデータを圧縮・展開する機能しかありませんので、
ディレクトリツリーを丸ごとという場合は、ファイルの列挙、読み込み、圧縮したデー
タの保存はアプリでやる必要がありますし、複数のファイルを一つに固めたときのファ
イルフォーマットも設計しなければなりません。
それよりは、zip のようなフォーマットを採用した方が楽だと思いますが。
zip の場合は、 http://sourceforge.net/projects/infozip/files/ から zip30.zip と
unzip60.zip をダウンロードして展開します。
zip の方は windll/visualc/lib/zip32z64.dsw を、unzip の方は
windll/vc8/unzip32.sln を開いて、それぞれ Release でビルドすればよいでしょう。
あと、リソースへの埋め込み・リソースからの展開は自前で書く必要があります。当
然。
aetos様
早速のお返事ありがとうございます。
zlibのみで階層を維持したまま、
フォルダを圧縮することができないのですか。。。
情報の収集不足でした。
zipフォーマットを採用すると言うことで進めていきます。
>zlib1.dll をダイナミックリンクするのではなく、スタティックリンクしたいというこ
>とでしょうか?
出来れば、Exe1個のみの構成にしたいので、DLLではなく、
スタティックリンクで考えています。
#しかし、ライセンスフリーのDLLでInとOutのパスを指定するだけで
#解凍してくれるものがあるのなら、DLLもありかな~と考えています。
>あと、リソースへの埋め込み・リソースからの展開は自前で書く必要があります。当
>然。
はい、リソースの埋め込みと展開は以前やったことがあるので大丈夫です。
もし、zipフォーマットでわからないところが出てきたら
よろしくお願いいたします。
ブヒブヒ
>出来れば、Exe1個のみの構成にしたいので、DLLではなく、
>スタティックリンクで考えています。
ではCAB形式を採用してはいかがですか。
XPならOS標準の機能でCABファイルの圧縮/解凍ができますよ。
http://www.eternalwindows.jp/installer/cabinet/cabinet07.html
#Windows 7 ならネイティブの Packaging API の機能を
#使うのもありかもしれませんね(^^
subaru 様
お返事ありがとうございます。
CAB形式について調べました。
Win2k以降だと、Cabinet.dllが標準でインストールされている
とのことなので、Cabinet.dllを利用しようかなと
考えております。
ただ、CallBackがよくわからないので勉強が必要ですが。
#Info-zipは企業で使用するにはライセンス関連で
#問題がおきると面倒なのであきらめました。