2005-12-27 [長年日記]
_ [C++] DLLでクラスを渡す方法
DLLを作ることになったので調べて・聞いてみた。
export(外向きに公開する)はC形式のメソッドで渡すのが無難。
void HogeClassConstruct(HogeClass* hoge){ - hogeのnew処理 - }
void HogeClassDestruct(HogeClass* hoge){ - hogeのdelete処理 - }
といった生成解体メソッドを渡すといい。
参考文献によれば、クラスをエクスポートも可能だ。
「__declspec(dllexport) キーワードを使うと、
データ、関数、クラス、クラスのメンバ関数を DLL からエクスポートできます。」
注意点は、
「エクスポート関数の名前は、コンパイラのバージョン間で変わる場合があります」
あたりかな。マングリング(名前変換)が行われるので注意が必要。
あとは当然ながらCからは呼び出せないとかか。
前者は使用側と提供側でコンパイラをバージョンを含めて統一する必要あり。
また、インライン関数や、
エクスポートしたクラスを使用側でオーバーライドする場合にも注意。
参考文献: http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_export_from_a_dll_using___declspec.28.dllexport.29.asp メモ: __declspec(dllexport/dllinport)はこんな感じで書けば使用提供両方で使える。 #ifdef PROVIDER #define __DELSPEC __declspec(dllexport) #else #define __DELSPEC __declspec(dllimport) #endif __DELSPEC Construct(Hoge* hoge); __DELSPEC Destruct(Hoge* hoge);