C++
コツコツと仕事する日々。もう改造とか飽きたので、今まで関数だけだった部分もプラグイン化してみる。独り言。
プラグインの読み込み側では
HMODULE hDLL = LoadLibrary( "hoge.dll" ); FUNC infoFunc = (FUNC )GetProcAddress(hDLL, "makeInstance"); BaseClass *mc = makeInstance(); mc->do();
とかして、プラグイン側では
class MyClass:public BaseClass { virtual do(); }; extern "C" __declspec(dllexport) MyClass * makeInstance() { return new MyClass; } extern "C" __declspec(dllexport) void releaseInstance(MyClass *p) { delete p }
みたいにしてんだけど、これって読み込み側とプラグイン側で違うコンパイラでコンパイルかけても動くもんなんかなー。BaseClassは
class BaseClass { virtual ~BaseClass(); virtual do() = 0; };
みたいになってたとしてvtableはどんなコンパイラでも同じなんだろか。
newとdeleteは一応両方ともplugin側でやるようにしたから大丈夫っぽいし、ちゃんと動いてるので問題ないんだけど、ちょっとそのうち公開とか考えるとプラグインの部分はちゃんとしときたいなー。
あと、
class MyClass{ .... virual Suicide() { delete this; } }
とかしたらダメなんかなー。激しくダメな気もするが、絶対大丈夫な気もする。
あと、実装がある仮想関数で継承した場合には絶対実装しなおせコラ、みたいなことってできないのかなー
class FooClass : public MyClass{ // 継承してみただけー };
とかやると、do()を実装しなおせバカっていうエラーが出るようにできないのだろうか。
とか言いつつ、もうプログラミング飽きてきたよー。宝くじ当たらないかな。買ってないけど。