プログラム用の小さなプラグイン システムを作成しています。その一部は既に完了しており、ファイルのロードとコンストラクター関数の呼び出しが機能しています。
関数の 1 つで、いくつかの (クラス) ポインターをハンドラーに戻す必要があります。そこで、セグ フォールトが発生します。
プログラム内:
class RenderInterface {
public:
RenderInterface();
virtual ~RenderInterface();
void RegisterBufferInterface(BufferInterface* interface)
{
bInterface = interface; // <---- this is where segfault occurs
}
void RegisterCameraInterface(CameraInterface* interface){}
void RegisterRenderInterface(RenderInterface* interface){}
static RenderInterface* GetSingletonPtr()
{
return _singleton;
}
private:
static RenderInterface* _singleton;
BufferInterface* bInterface;
CameraInterface* cInterface
RenderInterface* rInterface;
};
RenderInterface::_singleton は他の場所では 0 に設定されています。
登録関数内 (dll 内):
class BInterface : public BufferInterface {
public:
... various stuff ....
}
class GLPlugin : public Plugin {
public:
Plugin() : bInterface(0) {}
~Plugin(){}
void Initialize() // <--- is called after dll has been loaded
{
bInterface = new BInterface();
InterfaceManager::GetSingletonPtr()->RegisterBufferInterface(bInterface); // segfault
// register other stuff
}
private:
BufferInterface* bInterface;
};
これが機能するために何が欠けていますか?それを行う別の方法はありますか?
編集:コードを簡素化する際に BufferInterface の後に * を逃した、Luchian に感謝