封装了一些辅助类

来源:互联网 发布:淘宝卖家有什么好软件 编辑:程序博客网 时间:2024/05/16 09:35

RefClassHelper.h

/******************************************************************** author  :   Clark/陈泽丹 created :   2013-5-8 purpose :   反射辅助类*********************************************************************/#pragma once//反射类型struct RefClassType{//获取类型virtual long GetType() = 0;};//获得反射类型template< class Base, int TYPE_ID >struct GetClassTypeEx: public Base{//获取类型virtual long GetType(){ return TYPE_ID; }};//实例IDstruct RefClassID{//获取类型virtual long GetID() = 0;};//获得类型IDtemplate< class Base >struct GetClassIDEx: public Base{public:GetClassIDEx(const long _id):ID(_id){}//获取类型virtual long GetID(){ return ID; }private:const long ID;};


 

ServerDllHelper.h

/******************************************************************** author  :   Clark/陈泽丹 created :   2013-5-8 purpose :   DLL辅助类*********************************************************************/#pragma once#include <Windows.h>template< class _Ret, class _IUserServer, class _IGlobalServer >class CServerDllHelper{private:typedef _Ret (*ProcDLLFun)(_IUserServer **_ppIUserServer, _IGlobalServer *_pIGlobalServer);public:CServerDllHelper():m_hDll(NULL),m_pUserServer(NULL){ m_szErrMsg[0] = 0; }~CServerDllHelper(){Close(); if ( NULL != m_hDll ){::FreeLibrary(m_hDll); m_hDll = NULL; }}//销毁接口对象void Close(){if ( NULL != m_pUserServer ){//m_pUserServer->Release();m_pUserServer = NULL;}}// 描  述:创建服务器// 返回值:BOOL - 创建成功则返回TRUE,否则返回FALSEBOOL Create(LPCSTR _dll_name, LPCSTR _create_fun_name, _IGlobalServer *_pServerGlobal){Close();try{if ( NULL == m_hDll ){//第一次调用时未加载dll,下面进行加载dllm_hDll = ::LoadLibrary(_dll_name);if (m_hDll == NULL){lstrcpy(m_szErrMsg,"Can't load ");lstrcat(m_szErrMsg, _dll_name);throw m_szErrMsg;}}//下面获得dll的输出函数,即接口对象的创建函数ProcDLLFun proc = NULL;proc = (ProcDLLFun)::GetProcAddress(m_hDll,_create_fun_name);if ( NULL == proc ){lstrcpy(m_szErrMsg,"Can't GetProcAddress(");lstrcat(m_szErrMsg, _create_fun_name);lstrcat(m_szErrMsg, ")");throw m_szErrMsg;}if (!proc( &m_pUserServer, _pServerGlobal )){lstrcpy(m_szErrMsg,_create_fun_name);lstrcat(m_szErrMsg, " error!");throw m_szErrMsg;}return TRUE;//接口对象创建成功}catch (LPCSTR szMsg) {throw szMsg;return FALSE;}catch(...){lstrcpyn(m_szErrMsg, "Unknown Error!", sizeof(m_szErrMsg));return FALSE;}}//重载->,将helper对象的引用直接转为接口的引用_IUserServer* operator ->(){ return m_pUserServer; }//获得相关服务_IUserServer* GetServer(){ return m_pUserServer; }//判断接口指针是否有效BOOL IsValid(){ return ( NULL != m_pUserServer ); }//获得错误信息char* GetErrMsg(){ return m_szErrMsg; }private:_IUserServer*m_pUserServer;//接口对象HINSTANCEm_hDll;//动态链接库加载与否标志charm_szErrMsg[128];//错误信息};

 

UtilHelper.h

/******************************************************************** author  :   Clark/陈泽丹 created :   2013-5-8 purpose :   应用工具类*********************************************************************/#pragma once#include <iostream>using namespace std;#define TRACELN( MSG )do{ cout<<MSG<<endl; } while(0)#define TRACEERR( MSG )do{ cout<<"Error "<<MSG<<endl; } while(0)#define UTIL_TRUE_NORETURN( CONDITION )do{ if( CONDITION ) return; } while(0)#define UTIL_TRUE_RETURN( CONDITION, RET_VAL )do{ if( CONDITION ) return RET_VAL; } while(0)#define UTIL_TRUE_TRACE_NORETURN( CONDITION, MSG )do{ if( CONDITION ) { cout<<MSG<<endl; return; } } while(0)#define UTIL_TRUE_TRACE_RETURN( CONDITION, MSG, RET_VAL )do{ if( CONDITION ) { cout<<MSG<<endl; return RET_VAL; } } while(0)


ITrace.h

#pragma once#include <Windows.h>// Trace接口struct ITrace{// 销毁Tracevirtual void Release(void) = 0;// Trace普通信息(带回车换行功能, 线程安全, 蓝色)virtual BOOL TraceLn(LPCSTR lpszFormat, ...) = 0;// Trace错误信息(带回车换行功能, 线程安全, 红色)virtual BOOL TraceErrorLn(LPCSTR lpszFormat, ...) = 0;// Trace信息(带回车换行功能, 线程安全, 颜色自定义)virtual BOOL TraceColorLn(COLORREF color, LPCSTR lpszFormat, ...) = 0;};


 

#include "ITrace.h"#include "UtilHelper.h"class ServerTrace : public ITrace{public:// 销毁Tracevirtual void Release(void){}// Trace普通信息(带回车换行功能, 线程安全, 蓝色)virtual BOOL TraceLn(LPCSTR lpszFormat, ...){va_listargs;va_start(args, lpszFormat);_vsnprintf_s(m_msg, sizeof(m_msg) - 1, lpszFormat, args);TRACELN(m_msg); va_end(args);return TRUE;}// Trace错误信息(带回车换行功能, 线程安全, 红色)virtual BOOL TraceErrorLn(LPCSTR lpszFormat, ...){va_listargs;va_start(args, lpszFormat);_vsnprintf_s(m_msg, sizeof(m_msg) - 1, lpszFormat, args);TRACELN(m_msg); va_end(args);return TRUE;}// Trace信息(带回车换行功能, 线程安全, 颜色自定义)virtual BOOL TraceColorLn(COLORREF color, LPCSTR lpszFormat, ...){va_listargs;va_start(args, lpszFormat);_vsnprintf_s(m_msg, sizeof(m_msg) - 1, lpszFormat, args);TRACELN(m_msg); va_end(args);return TRUE;}private:enum { BUF_MAX = 1024 };char m_msg[BUF_MAX];};struct IServerGlobal;extern "C" __declspec(dllexport) BOOL CreateServerTrace(ITrace **_ppServerTrace, IServerGlobal *_pServerGlobal){UTIL_TRUE_TRACE_RETURN( NULL == _pServerGlobal, "Error, _pServerGlobal is null!", FALSE );ITrace* p_trace = new ServerTrace();UTIL_TRUE_TRACE_RETURN( (NULL == p_trace), "Error, CreateServerTrace!", FALSE );*_ppServerTrace = p_trace;return TRUE;}


 

原创粉丝点击