2009-07-03 9 views
2

私はこのように実行するシステムを持っている:これはdllを使う良い方法ですか? (?C++)

MAIN.EXEはそれだろう、うーん... sub.exe実行が

となどをsub2.exeとなど

を実行しますsubとsub2をdllに変更する方が効率的です。

もしそうなら、誰かがコードの多くを変更することなくDLLを作成するための正しい方向に向けることができますか?

答えて

2

DLL 間違いなくは別の実行可能ファイルよりも速くなります。しかし、それらを分離しておくことで、より柔軟性と再利用が可能になります(Unixシェルスクリプティングと考える)。

Thisは、Win32のDLLチュートリアルのようです。

コードをあまり変更しないのは、コマンドライン引数を使用してこれらのサブ情報に情報を渡すだけだと仮定しています。その場合は、main関数の名前を変更し、DLLから関数をエクスポートし、メインプログラムからこれらの関数を "main"という名前に変更します。

0

実行頻度によって異なります。それは、プロセスの引き裂き/引き裂きが相当なコストであるかどうかです。

2

あなたのプログラム(main.exe)が本当にそれと何の関係もないプログラムを起動しているだけなら、あなたがしていることを続けてください。 sub.exeとsub2.exeにmain.exeのメリットがある機能が含まれている場合は、main.exeがその関数を呼び出せるようにdllに変換します。

効率性に関しては、sub.exeとsub2.exeの大きさによって異なります。 dllの読み込みは、オーバーヘッドも意味することに注意してください。

+1

DLLをロードするオーバーヘッドは、exeを起動するよりもずっと小さくなります – Zifre

3

実際にはDLLも実行可能です。 .exe、.dll、.ocxなどのWindows用の複数の一般的なファイル拡張子をカバーするPE標準に準拠しています。

2つの実行可能ファイルを起動すると、それぞれが独自のアドレス空間と独自のメモリなどを取得します。しかし、実行可能ファイルとdllをロードすると、dllは実行可能ファイルのプロセス空間にロードされ、多くのことを共有します。

3つの実行可能ファイルがどのように一緒に通信するかによっては(それらが一緒に通信する場合でも)、いくつかのコードを書き直す必要があるかもしれません。基本的に、dllを持つ一般的なアプローチは、プログラム内部からdll関数を呼び出すことです。通常、プロセス間通信よりもはるかに簡単です

1

考慮すべき要素がいくつかあります。まず、そのシーケンスを実行する頻度と他の実行可能ファイルによってジョブが実行される時間はどれくらいですか?非常に頻繁に呼び出さず、実行する仕事がそれほど短くない場合、読み込み時間自体は重要ではありません。その場合、私は他のニーズに合ったものであればいいと思います。 OTOHがあなたにそれらをかなりたくさん呼んでもらえれば、それらをDLLにするといいでしょう。それらを一度ロードすると、その時点以降はすべての呼び出しがローカル関数の呼び出しと同じくらい速くなります。

exeをdllに変換するには、それほど複雑ではありませんが、特別な注意が必要なdllで作業する場合にはいくつかの点があります。dllmainを初期化に使用するといくつかの制限があります問題)。 dllはアドレス空間をexeと共有していることを覚えておく必要があります。 CRTのバージョンの差異は、あなたに悲しみを引き起こす可能性がありますand so on

0

メインを起動せずに誤ってサブ1またはサブ2を実行しないようにするには、dllに変換する方が安全ではないでしょうか?

関連する問題