123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // EventRaiseActionMgr.cpp: implementation of the CEventRaiseActionMgr class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "datamanager.h"
- #include "EventRaiseActionMgr.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CMapStringToPtr CEventRaiseActionMgr::m_mapMgrs;
- CMutex CEventRaiseActionMgr::m_mutexMgrs;
- CEventRaiseActionMgr::CEventRaiseActionMgr()
- {
- m_pfEventRaiseActionBase = NULL;
- m_pfInitActDll = NULL;
- m_pfUninitActDll = NULL;
- m_hDll = NULL;
- }
- CEventRaiseActionMgr::~CEventRaiseActionMgr()
- {
- FreeDll();
- }
- BOOL CEventRaiseActionMgr::LoadDll(CString strDll)
- {
- if(m_hDll == NULL)
- {
- m_hDll = LoadLibrary(strDll);
- if(m_hDll)
- {
- m_pfInitActDll = (Def_InitActDll*)GetProcAddress(m_hDll, "InitActDll");
- m_pfUninitActDll = (Def_UninitActDll*)GetProcAddress(m_hDll, "UninitActDll");
- m_pfEventRaiseActionBase = (Def_EventRaiseActionBase*)GetProcAddress(m_hDll, "EventRaiseActionBase");
- if(m_pfEventRaiseActionBase == NULL)
- {
- FreeDll();
- }
- else
- {
- if(m_pfInitActDll)
- {
- try
- {
- m_pfInitActDll();
- }
- catch (...)
- {
- }
- }
- }
- }
- }
- return (m_hDll != NULL);
- }
- void CEventRaiseActionMgr::FreeDll()
- {
- if(m_hDll)
- {
- if(m_pfUninitActDll)
- {
- try
- {
- m_pfUninitActDll();
- }
- catch(...)
- {
- }
- }
- FreeLibrary(m_hDll);
- }
- m_hDll = NULL;
- m_pfEventRaiseActionBase = NULL;
- m_pfInitActDll = NULL;
- m_pfUninitActDll = NULL;
- }
- void CEventRaiseActionMgr::EventRaiseActionBase(CDataNodeBase* pNode, int nStatus)
- {
- if(m_pfEventRaiseActionBase)
- {
- try
- {
- m_pfEventRaiseActionBase(pNode, nStatus);
- }
- catch (...)
- {
- }
- }
- }
- CEventRaiseActionMgr* CEventRaiseActionMgr::GetRaiseActDll(CString strDll)
- {
- CEventRaiseActionMgr* pMgr = NULL;
- if(!m_mapMgrs.Lookup(strDll, (void*&)pMgr))
- {
- pMgr = new CEventRaiseActionMgr;
- m_mutexMgrs.Lock();
- pMgr->LoadDll(strDll);
- m_mapMgrs.SetAt(strDll, pMgr);
- m_mutexMgrs.Unlock();
- }
- return pMgr;
- }
- void CEventRaiseActionMgr::FreeDllAll()
- {
- m_mutexMgrs.Lock();
- POSITION pos = m_mapMgrs.GetStartPosition();
- while (pos)
- {
- CString strDll;
- CEventRaiseActionMgr* pMgr = NULL;
- m_mapMgrs.GetNextAssoc(pos, strDll, (void*&)pMgr);
- delete pMgr;
- }
- m_mapMgrs.RemoveAll();
- m_mutexMgrs.Unlock();
- }
|