增加PlugInManage模板代码

This commit is contained in:
2019-08-26 21:19:13 +08:00
parent 0786f4c611
commit fb81037fa3
4 changed files with 131 additions and 17 deletions

View File

@@ -3,29 +3,41 @@
#include<hgl/plugin/ExternalPlugIn.h>
#include<hgl/type/ResManage.h>
#include<hgl/type/StringList.h>
namespace hgl
{
/**
* 插件管理
*/
template<typename T,typename C> class PlugInManage:public ResManage<C,PlugIn>
class PlugInManage:public ResManage<UTF16String,PlugIn>
{
OSString name; ///<插件类目名称(必须符合代码名称规则)
UTF16String name; ///<插件类目名称(必须符合代码名称规则)
OSStringList findpath; ///<插件查找目录
public:
PlugInManage(const OSString &n)
PlugInManage(const UTF16String &n)
{
name=n;
}
virtual ~PlugInManager()=default;
};//template<typename T> class PlugInManage
virtual ~PlugInManage();
bool RegistryPlugin(PlugIn *); ///<注册一个内置插件
uint UnregistryPlugin(const UTF16String &); ///<释放一个内置插件
bool AddFindPath (const OSString &path); ///<添加一个插件查找目录
PlugIn *LoadPlugin (const UTF16String &,const OSString &); ///<加载一个外部插件,明确指定全路径文件名
PlugIn *LoadPlugin (const UTF16String &); ///<加载一个外部插件,自行查找
bool UnloadPlugin(const UTF16String &); ///<释放一个外部插件
};//class PlugInManage:public ResManage<UTF16String,PlugIn>
/**
* 插件注册模板
*/
template<typename T,typename CN> class RegistryPlugInProxy
template<typename T> class RegistryPlugInProxy
{
T *plugin;
@@ -33,7 +45,7 @@ namespace hgl
RegistryPlugInProxy()
{
plugin=new CN;
plugin=new T;
}
virtual ~RegistryPlugInProxy()
@@ -45,13 +57,8 @@ namespace hgl
};//template<typename T> class RegistryPlugInProxy
/*
内部插件:
如Log一类必须存在的插件直接在代码中一块儿编译链接
外部插件:
如音频音频图片解码编码、压缩解压缩等根据需要加载释放,以独立的.dll/.so/.dylib文件形式存在
除log console/log file外其它所有插件可以是内部插件也可以是外部插件
如Log插件中的Console,File插件是直接在代码中的属于内部插件
但Log输出至MySQL的插件是以独立.dll/.so/dylib形式存在的属于外部插件。
*/
#ifndef __MAKE_PLUGIN__ //内部插件