之前说过服务器引擎是将通用接口独立出来,但是之间如何能够相互调用,我们可以考虑采用dll调用的方式。
记得以前做应用程序插件的的时候,插件也是以dll的形式调用的。我们通过相互传递指针的方式进行功能调用。
将应用程序窗口的指针全部封装在一个类里,这个类有不同的接口,能获取到窗口的主框架、菜单栏,进行程序功能扩展。
插件功能我们提供一个纯虚函数的接口类,插件功能只需要将里面纯虚函数一一实现,我们就能获得插件功能。
但是插件的具体功能我们不关心,也不需要知道是什么功能,这个和游戏服务器引擎功能和逻辑功能是一样的。
下面会给出相应的代码和介绍,通过下面的代码,其他的应用也能通过相应修改实现插件开发。
逻辑功能接口类:
// IModule
class IModule
{
public:
IModule(){}
virtual ~IModule(){}
//逻辑功能初始化
virtual bool Initialize(IKernel * pKernel) = 0;
//对象销毁
virtual bool Shutdown() = 0;
};
所有的逻辑功能模块都需要通过这个类扩展。
上面的只是逻辑功能的实现,下面我们需要将这个实例创建出来:
class ModuleCreator
{
public:
ModuleCreator(){}
virtual ~ModuleCreator() {if (m_pModule != NULL){m_pModule->Destroy();delete m_pModule;m_pModule = NULL}}
virtual IModule * Create() { if (m_pModule == NULL) {m_pModule = new A;} return m_pModule; }
virtual const char * Name() { return "A"; }
protect:
IModule *m_pModule;
};
这里面的A是继承于IModule的。
现在我们通过ModuleCreator就能创建逻辑功能的实例了
ModuleCreator * g_pModuleCreator = NULL;
extern "C" __declspec(dllexport)
ModuleCreator * __cdecl GetModuleCreator()
{
return g_pModuleCreator;
}
到此,我们的逻辑扩展功能就可以按照自己的想法实现了,下一章会对此功能进一步扩展并给出Demo。