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();
}
Beispiel #4
0
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;
}
Beispiel #5
0
	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;
}