bool CLoadModule::LoadModule(const char* pModulePath, const char* pModuleName, const char* pModuleParam) { string strModuleName = (string)pModuleName; //确定这个模块是否被注册过 _ModuleInfo* pCurr = m_mapModuleInfo.SearchMapData(strModuleName); if(NULL != pCurr) { //如果被注册过,先卸载现有的,再重新装载 UnLoadModule(strModuleName.c_str()); } _ModuleInfo* pModuleInfo = new _ModuleInfo(); if(NULL == pModuleInfo) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] new _ModuleInfo is error!\n")); return false; } //记录模块参数 pModuleInfo->strModuleParam = (string)pModuleParam; //开始注册模块函数 if(false == LoadModuleInfo(strModuleName, pModuleInfo, pModulePath)) { SAFE_DELETE(pModuleInfo); return false; } //查找此模块是否已经被注册,有则把信息老信息清理 _ModuleInfo* pOldModuleInfo = m_mapModuleInfo.SearchMapData(strModuleName); if(NULL != pOldModuleInfo) { //关闭副本 ACE_OS::dlclose(pOldModuleInfo->hModule); m_mapModuleInfo.DelMapData(strModuleName, true); } //将注册成功的模块,加入到map中 if(false == m_mapModuleInfo.AddMapData(pModuleInfo->GetName(), pModuleInfo)) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] m_mapModuleInfo.AddMapData error!\n")); SAFE_DELETE(pModuleInfo); return false; } //开始调用模块初始化动作 int nRet = pModuleInfo->LoadModuleData(App_ServerObject::instance()); if(nRet != 0) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadModuleInfo] strModuleName = %s, Execute Function LoadModuleData is error!\n", strModuleName.c_str())); SAFE_DELETE(pModuleInfo); return false; } OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] Begin Load ModuleName[%s] OK!\n", pModuleInfo->GetName())); return true; }
tweakbukconv::~tweakbukconv() { std::cout << "tweakbukconv::~tweakbukconv() begin" << std::endl; tweakloop = false; delete reader; for (unsigned int i = modulelist.size(); i > 0; i--) { UnLoadModule(modulelist[i-1]); } std::cout << "tweakbukconv::~tweakbukconv() end" << std::endl; }
void CLoadModule::Close() { //存环关闭当前活跃模块 for(int i = 0; i < m_mapModuleInfo.GetSize(); i++) { //卸载并删除当初new的module对象 UnLoadModule(m_mapModuleInfo.GetMapDataKey(i).c_str()); } m_mapModuleInfo.Clear(); }
bool CLoadModule::LoadModule(const char* szModulePath, const char* szResourceName) { vector<string> vecModuleName; string strModuleName; //将字符串数组解析成单一的模块名称 ParseModule(szResourceName, vecModuleName); sprintf_safe(m_szModulePath, MAX_BUFF_200, "%s", szModulePath); for(uint16 i = 0; i < (uint16)vecModuleName.size(); i++) { strModuleName = vecModuleName[i]; OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] Begin Load ModuleName[%s]!\n", strModuleName.c_str())); //确定这个模块是否被注册过 _ModuleInfo* pCurr = m_mapModuleInfo.SearchMapData(strModuleName); if(NULL != pCurr) { //如果被注册过,先卸载现有的,再重新装载 UnLoadModule(strModuleName.c_str()); } _ModuleInfo* pModuleInfo = new _ModuleInfo(); if(NULL == pModuleInfo) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] new _ModuleInfo is error!\n")); return false; } //开始注册模块 if(false == LoadModuleInfo(strModuleName, pModuleInfo)) { SAFE_DELETE(pModuleInfo); return false; } //将注册成功的模块,加入到map中 if(false == m_mapModuleInfo.AddMapData(pModuleInfo->GetName(), pModuleInfo)) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] m_mapModuleInfo.AddMapData error!\n")); SAFE_DELETE(pModuleInfo); return false; } OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] Begin Load ModuleName[%s] OK!\n", strModuleName.c_str())); } return true; }
Core::~Core(void) { _lDynamicLibrary::iterator it_DynamicLibrary; for (it_DynamicLibrary = m_lDynamicLibrary.begin(); it_DynamicLibrary != m_lDynamicLibrary.end(); ++it_DynamicLibrary) { UnLoadModule(it_DynamicLibrary->first); } m_lDynamicLibrary.clear(); _lSystemsByType::iterator it_Systems = m_lSystems.begin(); while (it_Systems != m_lSystems.end()) { ISystem* sys_ptr = it_Systems->second; RemoveSystem(sys_ptr); delete sys_ptr; it_Systems = m_lSystems.begin(); } DrawLine("~Core: Çàâåðøåíèå ðàáîòû!"); mLogger->close(); }
bool CLoadModule::LoadModule(const char* pModulePath, const char* pResourceName) { vector<string> vecModuleName; string strModuleName; //将字符串数组解析成单一的模块名称 ParseModule(pResourceName, vecModuleName); sprintf_safe(m_szModulePath, MAX_BUFF_200, "%s", pModulePath); for(uint16 i = 0; i < (uint16)vecModuleName.size(); i++) { strModuleName = vecModuleName[i]; OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] Begin Load ModuleName[%s]!\n", strModuleName.c_str())); //确定这个模块是否被注册过 _ModuleInfo* pCurr = m_mapModuleInfo.SearchMapData(strModuleName); if(NULL != pCurr) { //如果被注册过,先卸载现有的,再重新装载 UnLoadModule(strModuleName.c_str()); } _ModuleInfo* pModuleInfo = new _ModuleInfo(); if(NULL == pModuleInfo) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] new _ModuleInfo is error!\n")); return false; } //开始注册模块函数 if(false == LoadModuleInfo(strModuleName, pModuleInfo, m_szModulePath)) { SAFE_DELETE(pModuleInfo); return false; } //查找此模块是否已经被注册,有则把信息老信息清理 _ModuleInfo* pOldModuleInfo = m_mapModuleInfo.SearchMapData(strModuleName); if(NULL != pOldModuleInfo) { //关闭副本 ACE_OS::dlclose(pOldModuleInfo->hModule); m_mapModuleInfo.DelMapData(strModuleName, true); } //将注册成功的模块,加入到map中 if(false == m_mapModuleInfo.AddMapData(pModuleInfo->GetName(), pModuleInfo)) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] m_mapModuleInfo.AddMapData error!\n")); SAFE_DELETE(pModuleInfo); return false; } //开始调用模块初始化动作 int nRet = pModuleInfo->LoadModuleData(App_ServerObject::instance()); if(nRet != 0) { OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadModuleInfo] strModuleName = %s, Execute Function LoadModuleData is error!\n", strModuleName.c_str())); return false; } OUR_DEBUG((LM_ERROR, "[CLoadModule::LoadMoudle] Begin Load ModuleName[%s] OK!\n", strModuleName.c_str())); } return true; }