DLLを1つにまとめるには?

解決


けーぼう  2004-11-10 22:11:56  No: 55108

exeの中にdllを埋め込んで、dllを隠蔽したいんですけど、できるものなんでしょうか?
dllもexeも全て自分で作ったものです。


REE  2004-11-10 22:25:41  No: 55109

埋め込んだら、dllの意味がありません。
dllの内容をスタティックライブラリに変更して下さい。


けーぼう  2004-11-10 22:30:21  No: 55110

REEさん。レスありがとうございます。

現在、dll側も画面(いろいろなexeから使われる共通画面)を持っており、画面リソースを持っています。
スタティックリンクにする場合、リソースを統合しなければいけないと思いますが、そのやり方がわからなくて、dllにしております。
配布は1ファイルにしたいです。


シャノン  2004-11-10 23:14:07  No: 55111

じゃあ、そのいろんな画面から使われる共有 DLL を、いくつもある EXE のどれに埋め込むんですか?  と。

> 配布は1ファイルにしたいです。

これは、例えば作ったソフトを Web サイトに公開するときにひとつにしたいというだけ…ではないですよね?  であれば圧縮すればいいだけなのですが。

ユーザの HDD 上に展開された後もひとつのファイルでありたいと言うならば、EXE を分けたりせず、すべてを一本のプログラムにしてしまうことです。
メンテナンス性が落ちるかもしれませんけど。

作るときは複数のファイルを作って、それを結合して、結合したまま分解せずに、あたかも複数のファイルであるかのように振舞う——絶対に不可能と言うわけではありませんが、相当の困難を伴います。

あるいは、テンポラリフォルダに展開して、使い終わったら削除するという形でもいいのなら割と簡単ですが…プログラムを実行している間は DLL が隠蔽されずに、ちょっと探す気になれば見つかってしまうでしょう。


シャノン  2004-11-10 23:15:05  No: 55112

> 作るときは複数のファイルを作って、それを結合して、結合したまま分解せずに、あたかも複数のファイルであるかのように振舞う

ちょっと追記

作るときは複数のファイルを作って、それを結合して、実行時には結合したまま分解せずに、あたかも複数のファイルであるかのように振舞う


あいう  2004-11-11 00:11:56  No: 55113

>スタティックリンクにする場合、リソースを統合しなければいけないと思いますが、そのやり方がわからなくて、dllにしております。

VCですよね?
複数のRCファイルをVCで開き、各リソースをドラッグアンドドロップで
移動又はコピーできたと思います。


シャノン  2004-11-11 01:53:06  No: 55114

> 移動又はコピーできたと思います。

それは「統合」とか「リソースの共有」って言わないんじゃ…
リソースとしてのダイアログだけ DLL にあって、そのコード部分は各アプリにあるとは考えにくいですから、DLL にはダイアログ制御コードも入っているのでしょう。
それまで各アプリに分散させると、それはそれで問題が…


けーぼう  2004-11-11 02:06:40  No: 55115

シャノンさん、あいうさん、レスありがとうございます。

>じゃあ、そのいろんな画面から使われる共有 DLL を、いくつもある EXE のどれに埋め込むんですか?  と。
全てのexeにDLLを含ませるつもりでした。
# ActiveXのexeだと、他のプロセスと共有できたりするのですか??

しかしdllの意味(目的)から行って、やっぱりexeに入れるのは無理がありますね。でも、スタティックリンクだとリソースの扱いがよくわからないです。
結局、DLL内のコード(cppファイル)とリソース(rcファイル)を、各exeのプロジェクトに追加することにしました。
こうしてしまうと、ライブラリとして明示的に分けることはできませんが、ディレクトリを分けることで、共通部分(元DLL)のソースと、exeのソースを分けて管理することにします。
ちなみ、なぜ最初からこうしなかったかというと、私の中に「1プロジェクトには1リソース」という思い込みがあった為です。。


シャノン  2004-11-11 02:23:52  No: 55116

> しかしdllの意味(目的)から

それを言うなら

> 結局、DLL内のコード(cppファイル)とリソース(rcファイル)を、
> 各exeのプロジェクトに追加することにしました。

これが一番 DLL の意義に反しています。
もしその共有 DLL のコードを(利用する EXE に変更を及ぼさない範囲で)いぢった場合、ハードコーディングすると、すべての EXE をリコンパイルせねばならないのはおわかりでしょう。

部外者が口を出すべき領分ではないのは承知の上で言わせていただけば、何故、素直に DLL にしておかないのだろう、と疑問に思います。
そもそも、何故埋め込みたいんでしょうか。

もう DLL のコードを EXE に埋め込む形で決定したのでいい、とおっしゃるのであれば、これ以上の口出しはいたしませんが。


シャノン  2004-11-11 02:27:25  No: 55117

> そもそも、何故埋め込みたいんでしょうか。

> 私の中に「1プロジェクトには1リソース」という思い込みがあった為です。

これが原因かしら。
各 EXE には各 EXE ごとのリソースがあって、それらが使う DLL もリソースを持っているから、EXE は間接的に2つのリソースを持っていることになり気に食わない…と。

そうなると好みの問題なので他人がとやかく言うことではないのですが、俺の好みを言わせてもらえば、1プロジェクト1リソースというこだわりを捨てて、DLL に追い出す方が好きです。
それ以前に、DLL をリソースとコードを持った独立したプロジェクトと考えれば、1プロジェクト1リソースの原則にも反しないと思いますが。


けーぼう  2004-11-11 03:00:49  No: 55118

シャノンさん

すみません。話を難しくしてしまいましたね。

>「1プロジェクトには1リソース」
この思い込みは、1つのプロジェクトファイルには、1つのリソース(rcファイル)しか持てないという思い込みでした。
この為、複数のアプリケーションで画面(リソース)を共有する場合、共有画面をDLL化する必要があると思い込んでいました。

> > 結局、DLL内のコード(cppファイル)とリソース(rcファイル)を、
> > 各exeのプロジェクトに追加することにしました。
> これが一番 DLL の意義に反しています。
その通りなのですが、今回は最初からDLLにする必要がなかったので、DLLを選んだ私の判断ミスです。

私もDLLで別で管理する方がキレイなのは重々承知していますし、その方が好きですが、今回はそれよりも実行ファイルが1つになってシンプルな方が良いという判断です。(単純なアプリですので。。)

いつも、丁寧なレスありがとうございます。
また、今回は話を難しくしてしまい、申し訳ありませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加