
前回の質問で、ほぼコンパイルが通るようになったのですが、肝心の「UNLHA32.DLL」をどこにおけばいいのかわからなくて困っています。ほかにLIBファイルとかもあるのですがこれもどこのセットすればいいのか困っています。さらに、解凍したときどこに解凍されるのかわからないです。どこにおけばいいのか、解凍先をお分かりの方おられましたら、ご教授願います。
ソース
Unit6.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm6::FormActivate(TObject *Sender)
{
//DLLのロード
hDll = LoadLibrary(L"UNLHA32.DLL");
if (!hDll){
//DLLが見つからなかった場合
Application->MessageBox(
L"UNLHA32.DLL が見つかりませんでした。",
L"DLL エラー",
MB_ICONSTOP | MB_OK);
Close();
} else
//DLLがあったら関数ポインタを取得する
Unlha = (ProcUnlha)GetProcAddress(hDll, "Unlha");
}
//---------------------------------------------------------------------------
void __fastcall TForm6::FormDestroy(TObject *Sender)
{
//DLLの解放
if (hDll) FreeLibrary(hDll);
}
//---------------------------------------------------------------------------
void __fastcall TForm6::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 TForm6::ExitBtnClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
ヘッダ
Unit6.h
//---------------------------------------------------------------------------
#ifndef Unit6H
#define Unit6H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Dialogs.hpp>
#include <Vcl.Menus.hpp>
//---------------------------------------------------------------------------
class TForm6 : public TForm
{
__published: // IDE で管理されるコンポーネント
TMemo *Memo1;
TOpenDialog *OpenDialog1;
TPopupMenu *PopupMenu1;
TButton *ExtractBtn;
TButton *ExitBtn;
void __fastcall FormActivate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall ExtractBtnClick(TObject *Sender);
void __fastcall ExitBtnClick(TObject *Sender);
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 TForm6(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm6 *Form6;
//---------------------------------------------------------------------------
#endif
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>解凍先は、デスクトップでした。
UNLHA32に渡すオプションで指定するものかと思われますが…。
COMMAND.TXTにオプションについて記述されている筈ですので確認した方がよいでしょう。
未指定の場合はレジストリに記録されていればそちらに、なければカレントディレクトリではないですかね。
Win32APIのGetOpenFileName()使っているなら指定したファイルのある場所にカレントディレクトリが変更されているかも知れません。
>静的リンク版がどこのソースをどうすればいいのか、わかれば、そうしてみたいです。
UNLHA32.TXTには…
> UNLHA32.LIB : VC++ でコンパイルするためのインポートライブラリです。
となっていますので、C++builderでは使えない可能性もあるかと思われますが。
No.1
- 回答日時:
統合アーカイバのサイトから持ってきたものでインストールすれば
特に気にする必要が無いはずですが何か不都合があるのでしょうか?
インストーラによって必要なところにコピーされています
実行時に必要なのはDLLのみでLIBはリンク時に必要になるだけです
書くなら
>「UNLHA32.DLL」をどこにおけばいいのか
32ビットなら基本的にWindows\System32(インストーラで書きこまれてるはず)
64ビットなら基本的にWindows\SysWoW64(インストーラで書きこまれてるはず)
もしくは実際使うアプリケーションの実行モジュールと同じフォルダ(バージョン混在など特殊な事情の時)
>解凍したときどこに解凍されるのか
自分で解凍先設定できるはずですが・・・・・
標準であれば
32ビット C:\Program Files\ArchiverDLL\UNLHA32
64ビット C:\Program Files (x86)\ArchiverDLL\UNLHA32
になっているはずです
というか最初の質問が静的リンクするとか言ってませんでしたっけ?
静的リンクした場合DLLはモジュール内に埋め込まれるような気が・・・
(DLLを静的リンクしようとしたことないので違ってるかも)
回答くださり、ありがとうございます。
どうも、DLLはパスが通っていれば、どこでも行けそうです。
解凍先は、デスクトップでした。
静的リンクで作りたかったのですが、情報が少なく、初心者が手を出せそうもなかったので。あきらめました。
静的リンク版がどこのソースをどうすればいいのか、わかれば、そうしてみたいです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
多重定義が起きている?--lnk20...
-
_beginthreadにて発生するコン...
-
【gcc・cygwin】multiple defin...
-
string型とsbyte*型の変換
-
(void)0 はどんな意味ですか
-
メッセージマップ(ON_CONTROL_...
-
int main()、void main()、void...
-
【VC++6.0】イベントハンドラ関...
-
見た目は同じソースなのにエラ...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
4桁7セグでダイナミック点灯
-
既定のコンストラクタがありま...
-
コールバックって・・・
-
C#でラジオボタンを設定に記録...
-
DirectInput でのエラー
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
【gcc・cygwin】multiple defin...
-
多重定義が起きている?--lnk20...
-
戻り値を返す関数の前に(void)...
-
const_castのつかいどころを教...
-
C++にてtemplateで受け取った任...
-
C# Controls.Addで動的に配置し...
-
既定のコンストラクタがありま...
-
ウインドウの移動禁止
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
int main()、void main()、void...
-
C#でテンキーの操作は可能でし...
-
PowerShellにてツリービュー入...
-
C/C++でのScene管理について
-
VC++でGetKeyboardStateがうま...
-
C#でラジオボタンを設定に記録...
-
コールバックって・・・
-
gcc: incompatible pointer type
-
関数ポインタについて
おすすめ情報