電子書籍の厳選無料作品が豊富!

いつもお世話になっております。
VC++初心者です。

現在、VC++2005 ExpressEditon CLRプロジェクトで
コーディングしいます。

あるボタンをクリックすることで、指定したファイルaaa.txtを
lzh形式で圧縮するようにするには、どのようにしたら宜しいでしょうか。
そして、ある指定したファイルbbb.lzhを解凍するには
どのようにしたら宜しいでしょうか。

お手数ですが、サンプルソースを紹介して頂きたくお願いします。

A 回答 (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点質問させてください。
(1)
このソースはMFCですか?
(CLRプロジェクトでは、動きませんでした。)

(2)
MFCのソースに追加してみると
「'Application' : 定義されていない識別子です。」
というエラーが出てきました。
このときのApplicationは何ですか。

本当に初歩的ですみません。

補足日時:2009/08/24 11:51
    • good
    • 0
この回答へのお礼

一度、この質問を閉じて
新ためて、質問させて頂きます。

ご紹介していただいたソースはMFCの時に
参考にさせて頂きます。

お礼日時:2009/08/26 09:06

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' : 定義されていない識別子です。」
が出力されております。

補足日時:2009/08/25 13:27
    • good
    • 0
この回答へのお礼

本件、一度質問を閉じて、
改めて質問させて頂きます。

ご回答して頂いてありがとうございました。

お礼日時:2009/08/26 09:09

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

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

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

矢継ぎ早の質問ですみません。

お礼日時:2009/08/24 00:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!