Windows C++ 应用程序通用日志组件(组件及测试程序下载)(六)

2014-11-24 11:53:47 · 作者: · 浏览: 12
e ec)
89 {return m_fnILoggerGetErrorDesc(ec);}
90
91 // 加载 Logger DLL
92 BOOL Load(LPCTSTR lpszFilePath = DEF_LOGGER_DLL_FILE_PATH)
93 {
94 if(IsValid())
95 return FALSE;
96
97 BOOL isOK = FALSE;
98 m_hLogger = ::LoadLibrary(lpszFilePath);
99
100 if(m_hLogger)
101 {
102 m_fnILoggerCreate = (FN_ILogger_Create) ::GetProcAddress(m_hLogger, "ILogger_Create");
103 m_fnILoggerDestroy = (FN_ILogger_Destroy) ::GetProcAddress(m_hLogger, "ILogger_Destroy");
104 m_fnILoggerGetLogLevelDesc = (FN_ILogger_GetLogLevelDesc) ::GetProcAddress(m_hLogger, "ILogger_GetLogLevelDesc");
105 m_fnILoggerGetErrorDesc = (FN_ILogger_GetErrorDesc) ::GetProcAddress(m_hLogger, "ILogger_GetErrorDesc");
106
107 if(m_fnILoggerCreate && m_fnILoggerDestroy)
108 {
109 m_pLogger = ILogger_Create();
110 isOK = (m_pLogger != NULL);
111 }
112 }
113
114 if(!isOK)
115 Free();
116
117 return isOK;
118 }
119
120 // 卸载 Logger DLL
121 BOOL Free()
122 {
123 if(!IsValid())
124 return TRUE;
125
126 BOOL isOK = TRUE;
127
128 if(m_pLogger) ILogger_Destroy(m_pLogger);
129 if(m_hLogger) isOK = ::FreeLibrary(m_hLogger);
130
131 Reset();
132
133 return isOK;
134 }
135
136 BOOL IsValid () const {return m_pLogger != NULL;} // 判断其封装的 ILogger 指针是否非空
137 ILogger* Get () const {return m_pLogger;} // 获取 ILogger 指针
138 ILogger& operator * () const {return *m_pLogger;} // 获取 ILogger 引用
139 ILogger* operator -> () const {return m_pLogger;} // 获取 ILogger 指针
140 operator ILogger* () const {return m_pLogger;} // 转换为 ILogger 指针
141
142 private:
143 void Reset()
144 {
145 m_hLogger = NULL;
146 m_pLogger = NULL;
147 m_fnILoggerCreate = NULL;
148 m_fnILoggerDestroy = NULL;
149 m_fnILoggerGetLogLevelDesc = NULL;
150 m_fnILoggerGetErrorDesc = NULL;
151 }
152
153 private:
154 HMODULE m_hLogger;
155 ILogger* m_pLogger;
156
157 FN_ILogger_Create m_fnILoggerCreate;
158 FN_ILogger_Destroy m_fnILoggerDestroy;
159 FN_ILogger_GetLogLevelDesc m_fnILoggerGetLogLevelDesc;
160 FN_ILogger_GetErrorDesc m_fnILoggerGetErrorDesc;
161 };

  CDynamicLogger 为简化日志组件使用而设计,用于动态加载 Logger DLL 的场合。使用方法:

    0. 应用程序包含 DynamicLogger.h 头文件
    1. 创建 CDynamicLogger 对象(通常为全局对象)
    2. 调用 CDynamicLogger->Init(...) 初始化日志组件
    3. 使用 CDynamicLogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法写日志
    4. 调用 CDynamicLogger->UnInit(...) 清理日志组件(CDynamicLogger 对象析构时也会自动清理日志组件)
下载地址:http://up.2cto.com/2012/0705/20120705104838584.zip

作者:怪兽