インターフェイス(抽象クラス)を持つメインアプリがあり、このインターフェイスにはメインアプリと外部dllの両方に実装が必要です。このインターフェイスへのポインターを使用してメソッドにアクセスするため、何らかの条件に基づいて実装のいずれかのアドレスにポインターを割り当てます。
これはどのように達成できますか?
解決策としてマークされた回答が言うスタックオーバーフローで質問に出くわしました
メインアプリのインターフェース
class IModule
{
public:
virtual ~IModule(); // <= important!
virtual void doStuff() = 0;
};
メインアプリに実装可能
class ActualModule: public IModule
{
/* implementation */
};
また、dll から関数をエクスポートして、dll の実装へのポインタを返すことができます
__declspec (dllexport) IModule* CreateModule()
{
// call the constructor of the actual implementation
IModule * module = new ActualModule();
// return the created function
return module;
}
dll はIModuleのようなものが存在することをどのように知るようになるのでしょうか?
IModuleをexternとしてマークし、dll で使用できますか?