• ベストアンサー

【VC++2005(CLR)】lzh形式で、圧縮、解凍したい

いつもお世話になっております。 VC++初心者です。 現在、VC++2005 ExpressEditon CLRプロジェクトで コーディングしいます。 あるボタンをクリックすることで、指定したファイルaaa.txtを lzh形式で圧縮するようにするには、どのようにしたら宜しいでしょうか。 そして、ある指定したファイルbbb.lzhを解凍するには どのようにしたら宜しいでしょうか。 お手数ですが、サンプルソースを紹介して頂きたくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

(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のロードが動的か静的かが異なる。

yuki7091
質問者

お礼

一度、この質問を閉じて 新ためて、質問させて頂きます。 ご紹介していただいたソースはMFCの時に 参考にさせて頂きます。

yuki7091
質問者

補足

早速のご回答、ありがとうございます。 頂いたサンプルを使用しましたが、できませんでした。 このソースについて2点質問させてください。 (1) このソースはMFCですか? (CLRプロジェクトでは、動きませんでした。) (2) MFCのソースに追加してみると 「'Application' : 定義されていない識別子です。」 というエラーが出てきました。 このときのApplicationは何ですか。 本当に初歩的ですみません。

その他の回答 (2)

noname#198419
noname#198419
回答No.3

API.TXT、WINMES.TXT、ENUMAPI.TXTなど、パッケージに付属しているドキュメントは読んでみましたでしょうか? UNLHA32.hがヘッダファイルの検索パスにありますか? UNLHA32.LIBがライブラリの検索パスにありますか?

yuki7091
質問者

お礼

本件、一度質問を閉じて、 改めて質問させて頂きます。 ご回答して頂いてありがとうございました。

yuki7091
質問者

補足

ご回答、ありがとうございます。 ご指摘のとおり、まったく読んでおりませんでした。 かなりのテキストがあったので、先にご指摘頂いた点から ご報告します。 >UNLHA32.hがヘッダファイルの検索パスにありますか? UNLHA32.hがインクルードされていませんでした。 #include "C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.h" を追加しました。 (検索パスにある、とはこのことでしょうか?) >UNLHA32.LIBがライブラリの検索パスにありますか? 「プロジェクトの設定」からライブラリパスの登録を行いました。 しかし、まだ、 「'Application' : 定義されていない識別子です。」 が出力されております。

回答No.1

lha32.dllをインストールし、LoadLibraryでlha32.dllをロードし、lha32.dllのAPI関数を呼び出せば良い。

yuki7091
質問者

お礼

早速のご回答ありがとうございます。 早速ですが、3点質問させてください。 (1) lha32.dllでなく、UNLHA32.DLLをインストールしました。 これでも大丈夫でしょうか。 (2) 具体的なサンプルコードを紹介して頂くことは可能でしょうか。 (3) LoadLibraryの方法とDllImportAttribute属性のPInvokeを使用した方法 があるようですが、違う点はありますか。 矢継ぎ早の質問ですみません。

関連するQ&A

専門家に質問してみよう