- ベストアンサー
【VC++2005(CLR)】lzh形式で、圧縮、解凍したい
いつもお世話になっております。 VC++初心者です。 現在、VC++2005 ExpressEditon CLRプロジェクトで コーディングしいます。 あるボタンをクリックすることで、指定したファイルaaa.txtを lzh形式で圧縮するようにするには、どのようにしたら宜しいでしょうか。 そして、ある指定したファイルbbb.lzhを解凍するには どのようにしたら宜しいでしょうか。 お手数ですが、サンプルソースを紹介して頂きたくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1) UNLHA32.DLLでもOK。 (2) UNLHA32.DLLを動的に使用する場合のサンプルコード void Compress(void) { HMODULE Unlha32Hnd; int sts; char buf[1024]; int (WINAPI* ProcUnlha)(const HWND hwnd,LPCSTR szCmdLine,LPSTR szOutput,const DWORD dwSize); Unlha32Hnd = LoadLibrary("UNLHA32.DLL"); if (Unlha32Hnd != NULL) { *(FARPROC*)&ProcUnlha = GetProcAddress(Unlha32Hnd,"Unlha"); sts = ProcUnlha(Application->Handle,("a \"aaa.lzh\" \"aaa.txt\"",buf,1024); if (sts != 0) { 圧縮に失敗したエラー } FreeLibrary(Unlha32Hnd); } else { DLLがロード出来なかったエラー } } void Uncompress(void) { HMODULE Unlha32Hnd; int sts; char buf[1024]; int (WINAPI* ProcUnlha)(const HWND hwnd,LPCSTR szCmdLine,LPSTR szOutput,const DWORD dwSize); Unlha32Hnd = LoadLibrary("UNLHA32.DLL"); if (Unlha32Hnd != NULL) { *(FARPROC*)&ProcUnlha = GetProcAddress(Unlha32Hnd,"Unlha"); sts = ProcUnlha(Application->Handle,("e \"bbb.lzh\"",buf,1024); if (sts != 0) { 展開に失敗したエラー } FreeLibrary(Unlha32Hnd); } else { DLLがロード出来なかったエラー } } (3) DLLのロードが動的か静的かが異なる。
その他の回答 (2)
API.TXT、WINMES.TXT、ENUMAPI.TXTなど、パッケージに付属しているドキュメントは読んでみましたでしょうか? UNLHA32.hがヘッダファイルの検索パスにありますか? UNLHA32.LIBがライブラリの検索パスにありますか?
お礼
本件、一度質問を閉じて、 改めて質問させて頂きます。 ご回答して頂いてありがとうございました。
補足
ご回答、ありがとうございます。 ご指摘のとおり、まったく読んでおりませんでした。 かなりのテキストがあったので、先にご指摘頂いた点から ご報告します。 >UNLHA32.hがヘッダファイルの検索パスにありますか? UNLHA32.hがインクルードされていませんでした。 #include "C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.h" を追加しました。 (検索パスにある、とはこのことでしょうか?) >UNLHA32.LIBがライブラリの検索パスにありますか? 「プロジェクトの設定」からライブラリパスの登録を行いました。 しかし、まだ、 「'Application' : 定義されていない識別子です。」 が出力されております。
- chie65536(@chie65535)
- ベストアンサー率44% (8754/19863)
lha32.dllをインストールし、LoadLibraryでlha32.dllをロードし、lha32.dllのAPI関数を呼び出せば良い。
お礼
早速のご回答ありがとうございます。 早速ですが、3点質問させてください。 (1) lha32.dllでなく、UNLHA32.DLLをインストールしました。 これでも大丈夫でしょうか。 (2) 具体的なサンプルコードを紹介して頂くことは可能でしょうか。 (3) LoadLibraryの方法とDllImportAttribute属性のPInvokeを使用した方法 があるようですが、違う点はありますか。 矢継ぎ早の質問ですみません。
お礼
一度、この質問を閉じて 新ためて、質問させて頂きます。 ご紹介していただいたソースはMFCの時に 参考にさせて頂きます。
補足
早速のご回答、ありがとうございます。 頂いたサンプルを使用しましたが、できませんでした。 このソースについて2点質問させてください。 (1) このソースはMFCですか? (CLRプロジェクトでは、動きませんでした。) (2) MFCのソースに追加してみると 「'Application' : 定義されていない識別子です。」 というエラーが出てきました。 このときのApplicationは何ですか。 本当に初歩的ですみません。