表題にもありますが、
http://www.vector.co.jp/soft/win95/util/se210113 …
のSafeMelt32.DLLを使って、
http://www2.ttcn.ne.jp/tkky/Application/Extract/ …
http://www2.ttcn.ne.jp/tkky/Application/Compress …
のサイトのまねをして、圧縮解凍ソフトを作りたいのですが、単純に、コードの中の「Unlha」を「SafeMelt32」に置き換えればいいのでしょうか?
それとも、もっと別なことを読み取らないといけないのでしょうか?
C++は初めてなので、できれば、修正個所をどういう風にすればいいのか、具体的に指示してくださると助かります。
環境は、C++Builderです。
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
// DLL のロード
hDll = LoadLibrary("UNLHA32.DLL");
if (!hDll) {
// DLL が見つからなかった場合
Application->MessageBox(
"UNLHA32.DLL が見つかりませんでした。",
"DLL エラー",
MB_ICONSTOP | MB_OK);
Close();
} else
// DLL があったら関数ポインタを取得する
Unlha = (ProcUnlha)GetProcAddress(hDll, "Unlha");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
// DLL の解放
if (hDll) FreeLibrary(hDll);
}
//---------------------------------------------------------------------------
// 書庫ファイル作成
void __fastcall TForm1::CompressBtnClick(TObject *Sender)
{
AnsiString ArchiveName, // 書庫名
CompressName, // 圧縮するファイル名
cmdLine; // コマンド変数
// 圧縮用のフィルタを設定する。
OpenDialog1->Filter = "すべてのファイル(*.*)|*.*";
// ファイルが選択されなければ処理終わり
if (!OpenDialog1->Execute()) return;
// 選択したファイル名を圧縮ファイル名として使う
CompressName = OpenDialog1->FileName;
ArchiveName = ChangeFileExt(CompressName, ".lzh");
// コマンドライン作成(空白パスなどには未対応)
cmdLine = "a " + ArchiveName // 書庫名
+ " " + CompressName; // 圧縮するファイル名
// Unlha 操作
Unlha(Application->Handle, cmdLine.c_str(), "", 0);
// 結果表示用 Memo1 をクリア
Memo1->Lines->Clear();
Memo1->Lines->Add("ファイル \"" + ArchiveName + "\" が作成されました。");
}
//---------------------------------------------------------------------------
// 書庫ファイル展開
void __fastcall TForm1::ExtractBtnClick(TObject *Sender)
{
AnsiString lzhName, // 書庫名
cmdLine; // コマンド変数
OpenDialog1->Filter = "圧縮ファイル(*.lzh)|*.lzh";
// ファイルが選択されなければ処理終わり
if (!OpenDialog1->Execute()) return;
lzhName = OpenDialog1->FileName;// 解凍ファイル名
// コマンドライン作成(空白パスなどには未対応)
cmdLine = "x " + lzhName;// 解凍する書庫名
// Unlha 操作
Unlha(Application->Handle, cmdLine.c_str(), "", 0);
// 結果表示用 Memo1 をクリア
Memo1->Lines->Clear();
Memo1->Lines->Add("ファイル \"" + lzhName + "\" の解凍が終了しました。");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExitBtnClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Unit1.h
字数制限のため省略
private: // ユーザー宣言
// DLL のロードのための変数宣言
HINSTANCE hDll;
// DLL 呼び出し関数の宣言("Unlha32.dll" の Unlha 関数を呼び出す)
typedef int WINAPI (*ProcUnlha)(const HWND _hwnd,
LPCSTR _szCmdLine,
LPSTR _szOutput,
const DWORD _dwSize);
// 関数ポインタ
ProcUnlha Unlha;
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
ソースは、上のページのものを掲載しました。
どこをどう直せばよいのかご教授願います。
よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
アクセス 壊れた? 「ファイ...
-
参照するファイルをワイルドカ...
-
binファイルを解凍したいの...
-
VB.netで DirListBoxを使いたい
-
.NETアプリを作ったときの .man...
-
exeファイルの中身を見る方法は...
-
自分で作成した重要ファイルを...
-
リンクの張り付けかたを教えて...
-
HTMLからのBATファイル実行
-
jarファイル
-
監視ツールを入れさせられまし...
-
COBOL
-
Excel VBA ファイル取得につい...
-
既に開いているエクセルを閉じ...
-
g1tファイルとは
-
Seasar2のdiconファイルの読み方
-
【VBS】 iniファイルの特定部...
-
iniファイル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iPhoneでXMLファイルを開くには...
-
公文書のxmlファイルの開き方が...
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
#include <Windows.h>というヘ...
-
jarファイル
-
Seasar2のdiconファイルの読み方
-
Word VBA MSGBOX 内で降順表示
-
監視ツールを入れさせられまし...
-
CSSを1ページに1枚作るのって変...
-
コマンドプロンプトで、指定し...
-
ファイルが開かれているかどう...
-
exeファイルをデータ転送サービ...
-
パイソンでpy ファイルと p...
-
exeファイルの中身を見る方法は...
-
Latexで図番号だけを「図1.1」...
-
参照するファイルをワイルドカ...
-
バッチ処理で追記コピーしたい
おすすめ情報
すいません。C++は初めて。と書きましたが、何が書いてあるのかは読めるレベルです。でも専門ではないので、初心者レベルです。よろしくお願いいたします。