こないだ (id:wata_d:20051222) の 実装を別ファイルに書いておいて、必要な箇所で include というのをやってた。 DLL のエクスポートする関数で、実装がまったく同じものを別ファイルに切り出して、それぞれの DLL の適当なところで include 。だいぶすっきり。まあ簡単な関数ばかりなのでマクロにしちゃってもいいんですが、やっぱり素のソースを置けるほうが見やすいし修正もしやすい。
こんな感じかな。
// impl.inc __declspec(dllexport) void __stdcall hoge() { impl.hoge(); } __declspec(dllexport) void __stdcall foo() { impl.foo(); } // Dll1.cpp -> Dll1.dll CDll1_Impl impl; extern "C" { #include "impl.inc"; } // Dll2.cpp -> dll2.dll CDll2_Impl impl; extern "C" { #include "impl.inc"; }
実際の処理は impl クラスがやると。別々に書いても大して変わらんか……。 hoge() に処理を追加したくなった時などは、 1 箇所修正するだけで済むという利点はあるし、無駄なわけでもないかな。