From bc0475fd9d8fd8eeda423f182fba8be25eb36dde Mon Sep 17 00:00:00 2001 From: hyzboy Date: Thu, 29 Aug 2019 15:28:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=8E=A5=E5=8F=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/log/Logger.h | 9 +++++---- inc/hgl/plugin/ExternalPlugIn.h | 12 +++++++++--- src/Log/Loginfo.cpp | 11 +++++------ src/PlugIn/ExternalPlugIn.cpp | 14 +++++++++++++- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/inc/hgl/log/Logger.h b/inc/hgl/log/Logger.h index aa1283d..bf88457 100644 --- a/inc/hgl/log/Logger.h +++ b/inc/hgl/log/Logger.h @@ -20,16 +20,17 @@ namespace hgl class Logger { protected: - + LogLevel min_level; ///<最小输出级别 - UTF16String project_code; + Logger *parent; ///<上级输出器 public: - Logger(LogLevel l){min_level=l;} + Logger(LogLevel l,Logger *pl=nullptr){min_level=l;parent=pl;} virtual ~Logger()=default; - const LogLevel GetLevel()const{return min_level;} ///<取得最小输出级别 + const LogLevel GetLevel ()const{return min_level;} ///<取得最小输出级别 + Logger * GetParent (){return parent;} ///<取得上级日志输出器 virtual void Close()=0; ///<关闭日志 diff --git a/inc/hgl/plugin/ExternalPlugIn.h b/inc/hgl/plugin/ExternalPlugIn.h index e5ebb99..390b4e9 100644 --- a/inc/hgl/plugin/ExternalPlugIn.h +++ b/inc/hgl/plugin/ExternalPlugIn.h @@ -4,7 +4,9 @@ #include #include namespace hgl -{ +{ + struct PlugInInterface; + /** * 外部插件状态 */ @@ -26,6 +28,8 @@ namespace hgl OSString filename; ///<插件对应的真实文件系统名称 ExternalModule *pi_module; + + PlugInInterface *plugin_interface; public: @@ -36,8 +40,10 @@ namespace hgl ExternalPlugIn(); virtual ~ExternalPlugIn(); - void Free(); ///<释放插件文件 - bool Load(const OSString &,const OSString &); ///<加载插件 + void Free(); ///<释放插件文件 + bool Load(const OSString &,const OSString &); ///<加载插件 + + virtual bool GetInterface(uint,void *) override; };//class ExternalPlugIn:public PlugIn }//namespace hgl #endif//HGL_EXTERNAL_PLUG_IN_INCLUDE diff --git a/src/Log/Loginfo.cpp b/src/Log/Loginfo.cpp index 352b096..a47560e 100644 --- a/src/Log/Loginfo.cpp +++ b/src/Log/Loginfo.cpp @@ -167,12 +167,11 @@ namespace hgl void CloseLog() { - if(li) - { - li->Close(); - delete li; - li=nullptr; - } + if(!li)return; + + li->Close(); + delete li; + li=nullptr; } void Log(LogLevel level,const u16char *str,int size) diff --git a/src/PlugIn/ExternalPlugIn.cpp b/src/PlugIn/ExternalPlugIn.cpp index 59d23b0..bd76f66 100644 --- a/src/PlugIn/ExternalPlugIn.cpp +++ b/src/PlugIn/ExternalPlugIn.cpp @@ -7,6 +7,7 @@ namespace hgl { status=PlugInStatus::NONE; pi_module=nullptr; + plugin_interface=nullptr; } ExternalPlugIn::~ExternalPlugIn() @@ -19,6 +20,7 @@ namespace hgl if(!pi_module)return; plugin_interface->Close(); + plugin_interface=nullptr; delete pi_module; pi_module=nullptr; @@ -44,7 +46,10 @@ namespace hgl { plugin_interface=init_proc(); - if(plugin_interface) + if(plugin_interface + &&plugin_interface->GetVersion + &&plugin_interface->GetIntro + &&plugin_interface->GetInterface) { status=PlugInStatus::COMPLETE; @@ -64,4 +69,11 @@ namespace hgl status=PlugInStatus::LOAD_FAILED; return(false); } + + bool ExternalPlugIn::GetInterface(uint ver,void *interface_data) + { + if(!plugin_interface)return(false); + + return plugin_interface->GetInterface(ver,interface_data); + } }//namespace hgl