| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 | #pragma once#include <windows.h>namespace OTSController {	//extern COTSUtilityExport* g_LpUtilityTools;	//extern CString csLogData;#ifdef AMICS_WINAPI#undef AMICS_WINAPI#endif#define AMICS_WINAPI WINAPI#define DECLARE_FUNCTION_BEGIN(FuncName) \if (m_dllHandle)\{\	if (!m_fn##FuncName)\	{\		m_fn##FuncName = (FUNC_##FuncName)GetProcAddress(m_dllHandle, #FuncName);\	}\	if (m_fn##FuncName)\	{\#define DECLARE_FUNCTION_END(FuncName) \}\	if (SUCCEEDED(m_nLastReturn))\	{\		return true;\	}\}\return false;#define DECLARE_FUNCTION0(FuncName) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName() \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION1(FuncName, Param1) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION2(FuncName, Param1, Param2) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION3(FuncName, Param1, Param2, Param3) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION4(FuncName, Param1, Param2, Param3, Param4) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3, Param4); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3, Param4 p4) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3, p4); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION5(FuncName, Param1, Param2, Param3, Param4, Param5) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3, Param4, Param5); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3, p4, p5); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION6(FuncName, Param1, Param2, Param3, Param4, Param5, Param6) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3, p4, p5, p6); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION7(FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6, Param7); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) \    { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3, p4, p5, p6, p7); \        DECLARE_FUNCTION_END(FuncName) \    }#define DECLARE_FUNCTION8(FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8) \protected: \    typedef int (AMICS_WINAPI* FUNC_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8); \    FUNC_##FuncName m_fn##FuncName; \public: \    bool FuncName(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) \        { \        DECLARE_FUNCTION_BEGIN(FuncName) \        m_nLastReturn = m_fn##FuncName(p1, p2, p3, p4, p5, p6, p7, p8); \        DECLARE_FUNCTION_END(FuncName) \        }//declare constructors and LoadFunctions#define DECLARE_CLASS_BEGIN(ClassName) \public:	\    ClassName () \    { #define INIT_FUNCTION(FuncName) m_fn##FuncName = nullptr;#define DECLARE_CLASS_END }	class DllBase	{	protected:		HINSTANCE m_dllHandle;		CString m_dllName;		long m_nLastReturn;		BOOL m_bLogError;	public:		DllBase()			: m_dllHandle(nullptr)			, m_dllName(_T(""))			, m_nLastReturn(0)			, m_bLogError(TRUE)		{		}		virtual ~DllBase()		{			FreeDll();		}		LPCTSTR GetDllName()		{			return m_dllName;		}		HINSTANCE GetHandle() { return m_dllHandle; }		long GetLastReturn()		{			return m_nLastReturn;		}		void SetLogError(const BOOL a_bShow = TRUE)		{			m_bLogError = a_bShow;		}		//A NULL here means the name has already been set		bool LoadDll(LPCTSTR name)		{			//try to load#ifdef _AFXDLL			m_dllHandle = AfxLoadLibrary(name);#else			m_dllHandle = LoadLibrary(name);#endif			LogTrace(__FILE__, __LINE__, "                AfxLoadLibrary DllName = [%s] End        ", name);			if (!m_dllHandle)			{				//show warning here if needed				m_dllName = _T("");				DWORD errCode = GetLastError();				LogErrorTrace(__FILE__, __LINE__, "LoadLibrary [%s] failed, return ErrorCode %d.", (LPCTSTR)name, errCode);				return false;			}			else			{				m_dllName = name;				LogTrace(__FILE__, __LINE__, " LoadLibrary [%s] Success", (LPCTSTR)m_dllName);			}			return true;		}		bool FreeDll()		{			bool bRet = true;			if (m_dllHandle)			{#ifdef _AFXDLL				bRet = AfxFreeLibrary(m_dllHandle) ? true : false;#else				bRet = FreeLibrary(m_dllHandle) ? true : false;#endif				m_dllHandle = nullptr;				//	LogTrace(_T("FreeLibrary %s."), (LPCTSTR)m_dllName);				LogTrace(__FILE__, __LINE__, "FreeLibrary %s.", (LPCTSTR)m_dllName);				m_dllName = _T("");			}			else			{				//	LogTrace(_T("No valid dll to free."));				LogTrace(__FILE__, __LINE__, "No valid dll to free.");			}			return bRet;		}	};}
 |