OS MS windows10
Visual studio2015
これまで作ったC++関数やCLASSをDLL化したいですが、
当初からDLL化するつもりはなかったので、どうすれば良いのでしょうか。
例えば、関数単位でのDLL化と単一CLASS単位のDLL化
あるいは複数のCLASSをまとめてDLL化は可能でしょうか。
それからDLL化のための最適的単位があるでしょう。
DLL化の単位問題
Re: DLL化の単位問題
決まった単位というのはないのですが,密接に関わるものは通常一つのDLLにまとめます。
わかりやすそうな方法としては,「これはどういうDLLですか」に対して一つの答えになる間は同じDLLに含める,というのがあるかと思います。
「○○と××するDLL」ならば,「○○するDLL」と「××するDLL」に分けた方が使いやすいですし,
「○○するDLL。ただし,△△.dllが必要」というような場合で,「△△.dll」の役割が「○○で使っていた中で他から使えそうなものを分離しただけ」ならまとめた方がよいでしょう。
まぁ,例外的に実装を選択するためだったり(利用するデータベースによって実装が変わる等),プラグインとしての実装だったりすると,公開関数が一つ,ということもあるとは思いますが。
なお,関数単位でのDLL化はお薦めしません。オーバーヘッドが大きすぎます (単に共通化するだけならLIBで十分)。
また,classは実際にはマングルされた名前のメンバ関数や(static)メンバ変数が,クラスとは無関係にエクスポートされます。
このため,classをDLLにしても特定のコンパイラからしか使えず,DLLには向きません (COM化する場合を除く)。
わかりやすそうな方法としては,「これはどういうDLLですか」に対して一つの答えになる間は同じDLLに含める,というのがあるかと思います。
「○○と××するDLL」ならば,「○○するDLL」と「××するDLL」に分けた方が使いやすいですし,
「○○するDLL。ただし,△△.dllが必要」というような場合で,「△△.dll」の役割が「○○で使っていた中で他から使えそうなものを分離しただけ」ならまとめた方がよいでしょう。
まぁ,例外的に実装を選択するためだったり(利用するデータベースによって実装が変わる等),プラグインとしての実装だったりすると,公開関数が一つ,ということもあるとは思いますが。
なお,関数単位でのDLL化はお薦めしません。オーバーヘッドが大きすぎます (単に共通化するだけならLIBで十分)。
また,classは実際にはマングルされた名前のメンバ関数や(static)メンバ変数が,クラスとは無関係にエクスポートされます。
このため,classをDLLにしても特定のコンパイラからしか使えず,DLLには向きません (COM化する場合を除く)。