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;
- }
- };
- }
|