EventRaiseActionMgr.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // EventRaiseActionMgr.cpp: implementation of the CEventRaiseActionMgr class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "datamanager.h"
  6. #include "EventRaiseActionMgr.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CMapStringToPtr CEventRaiseActionMgr::m_mapMgrs;
  16. CMutex CEventRaiseActionMgr::m_mutexMgrs;
  17. CEventRaiseActionMgr::CEventRaiseActionMgr()
  18. {
  19. m_pfEventRaiseActionBase = NULL;
  20. m_pfInitActDll = NULL;
  21. m_pfUninitActDll = NULL;
  22. m_hDll = NULL;
  23. }
  24. CEventRaiseActionMgr::~CEventRaiseActionMgr()
  25. {
  26. FreeDll();
  27. }
  28. BOOL CEventRaiseActionMgr::LoadDll(CString strDll)
  29. {
  30. if(m_hDll == NULL)
  31. {
  32. m_hDll = LoadLibrary(strDll);
  33. if(m_hDll)
  34. {
  35. m_pfInitActDll = (Def_InitActDll*)GetProcAddress(m_hDll, "InitActDll");
  36. m_pfUninitActDll = (Def_UninitActDll*)GetProcAddress(m_hDll, "UninitActDll");
  37. m_pfEventRaiseActionBase = (Def_EventRaiseActionBase*)GetProcAddress(m_hDll, "EventRaiseActionBase");
  38. if(m_pfEventRaiseActionBase == NULL)
  39. {
  40. FreeDll();
  41. }
  42. else
  43. {
  44. if(m_pfInitActDll)
  45. {
  46. try
  47. {
  48. m_pfInitActDll();
  49. }
  50. catch (...)
  51. {
  52. }
  53. }
  54. }
  55. }
  56. }
  57. return (m_hDll != NULL);
  58. }
  59. void CEventRaiseActionMgr::FreeDll()
  60. {
  61. if(m_hDll)
  62. {
  63. if(m_pfUninitActDll)
  64. {
  65. try
  66. {
  67. m_pfUninitActDll();
  68. }
  69. catch(...)
  70. {
  71. }
  72. }
  73. FreeLibrary(m_hDll);
  74. }
  75. m_hDll = NULL;
  76. m_pfEventRaiseActionBase = NULL;
  77. m_pfInitActDll = NULL;
  78. m_pfUninitActDll = NULL;
  79. }
  80. void CEventRaiseActionMgr::EventRaiseActionBase(CDataNodeBase* pNode, int nStatus)
  81. {
  82. if(m_pfEventRaiseActionBase)
  83. {
  84. try
  85. {
  86. m_pfEventRaiseActionBase(pNode, nStatus);
  87. }
  88. catch (...)
  89. {
  90. }
  91. }
  92. }
  93. CEventRaiseActionMgr* CEventRaiseActionMgr::GetRaiseActDll(CString strDll)
  94. {
  95. CEventRaiseActionMgr* pMgr = NULL;
  96. if(!m_mapMgrs.Lookup(strDll, (void*&)pMgr))
  97. {
  98. pMgr = new CEventRaiseActionMgr;
  99. m_mutexMgrs.Lock();
  100. pMgr->LoadDll(strDll);
  101. m_mapMgrs.SetAt(strDll, pMgr);
  102. m_mutexMgrs.Unlock();
  103. }
  104. return pMgr;
  105. }
  106. void CEventRaiseActionMgr::FreeDllAll()
  107. {
  108. m_mutexMgrs.Lock();
  109. POSITION pos = m_mapMgrs.GetStartPosition();
  110. while (pos)
  111. {
  112. CString strDll;
  113. CEventRaiseActionMgr* pMgr = NULL;
  114. m_mapMgrs.GetNextAssoc(pos, strDll, (void*&)pMgr);
  115. delete pMgr;
  116. }
  117. m_mapMgrs.RemoveAll();
  118. m_mutexMgrs.Unlock();
  119. }