«前の日記(2005-12-25) 最新 次の日記(2005-12-28)» 編集

いがいが日記


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);

«前の日記(2005-12-25) 最新 次の日記(2005-12-28)» 編集