virtual bool Shut()
{
return true;
}
virtual bool ReadyExecute()
{
return true;
}
virtual bool Execute()
{
return true;
}
};
这些函数被调用的顺序,和NFCPluginManager启动的时候调用的顺序是一样的,每一个继承NFIModule的类(Mudole),都是按照此顺序运行。
所有的Module类的载体都是插件(动态库),因此为了夸平台,首先NF对要加载的动态库作了一个抽象,用NFCDynLib类来表示(这里向Ogre的作者致敬,几乎纯抄他的),一个动态库就是一个NFCDynLib类对象。同时NFCPluginManager类用来管理所有加载的NFCDynLib类对象,它负责根据动态库文件名对相应的库进行加载,并保存加载后的NFCDynLib对象指针,对于不同平台的插件区分加载,也是这里实现的,代码大概如下:
class NFCDynLib
{
public:
NFCDynLib(const std::string& strName)
{
mbMain = false;
mstrName = strName;
#ifdef NF_DEBUG_MODE
mstrName.append("_d");
#endif
#if NF_PLATFORM == NF_PLATFORM_WIN
mstrName.append(".dll");
#else
mstrName.append(".so");
#endif
printf("LoadPlugin:%s\n", mstrName.c_str());
}
~NFCDynLib()
{
}
bool Load()
{
std::string strLibPath = "./";
strLibPath = mstrName;
网友评论