我正在为一个程序编写一个小型插件系统。它的某些部分已经完成,加载文件并调用构造函数工作。
在其中一个函数中,我需要将一些(类)指针传递回处理程序,这就是我得到段错误的地方。
在程序中:
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