Ejemplo n.º 1
0
LWRESULT Cx_PluginLoader::UnloadPlugin(const MODID& modid, bool force_unload)
{
    int32_ moduleIndex = GetPluginIndex(modid);
	if(moduleIndex < 0)
		return LWDP_PLUGINMGR_NOT_FIND_MODULE;

	Ix_Module* pModule = m_modules[moduleIndex]->module;
	ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_POINTER_IS_NULL, pModule, "Cx_PluginLoader::UnloadPlugin Get Ix_Module Pointer Error");

	if(!force_unload)
	{
		if(!pModule->CanUnloadPlugin())
			return LWDP_PLUGINMGR_MODULE_USING;
	}
	else
	{
		lw_log_warning(LWDP_MODULE_LOG, "Force Unload Plugin(%s)", pModule->GetModuleName());
	}
	
	pModule->UninitializePlugin();

	MODID tmpModid = pModule->GetModuleMODID();
    ClearModuleItems(tmpModid);
    ReleaseModule(tmpModid);

	return LWDP_OK;
}
Ejemplo n.º 2
0
bool Cx_PluginLoader::ClearModuleItems(HMODULE hModule)
{
    Ix_Module* pModule = GetModule(hModule);

    if (pModule)
    {
        pModule->ClearModuleItems();
        return true;
    }

    return false;
}
Ejemplo n.º 3
0
bool Cx_PluginLoader::ClearModuleItems(const MODID& modid)
{
    Ix_Module* pModule = GetModule(modid);

    if (pModule)
    {
        pModule->ClearModuleItems();
        return true;
    }

    return false;
}
Ejemplo n.º 4
0
LWRESULT Cx_PluginLoader::LoadPlugin(const MODID& modid)
{
    int32_ existIndex = GetPluginIndex(modid);

    if (existIndex >= 0 && m_modules[existIndex]->modid.empty())
    {
        return LWDP_PLUGINMGR_MODULE_ALREADY_LOAD;
    }

	Cx_Interface<Ix_FwIntf> iFwIntf(CLSID_FwIntf);
	ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_OBJECT_POINTER_IS_NULL, !iFwIntf.IsNull(), 
		             "Cx_PluginLoader::LoadPlugin Get Object(FwIntf) Error");
	Ix_Module* pModule = iFwIntf->Api_Fw_GetModulePtr(modid);
	if(!pModule)
	{
		return LWDP_PLUGINMGR_NOT_FIND_MODULE_ENTRY;
	}

	LWRESULT stat = LWDP_ERROR;
    if (pModule)
    {
    	if((stat = CheckPlugin(pModule)) != LWDP_OK)
    	{
    		if(pModule->GetModuleInstance()) //!< 只有加载的外部模块才Unload
    		{
    			Cx_Interface<Ix_FwIntf> iFwIntf(CLSID_FwIntf);
				ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_OBJECT_POINTER_IS_NULL, !iFwIntf.IsNull(), 
					             "Cx_PluginLoader::LoadPlugin Get Object(FwIntf) Error");
				iFwIntf->Api_Fw_UnLoadModule(pModule->GetModuleMODID());
    		}
			return stat;
    	}
		
    	pModule->Initialize(this, 0);
        if(RegisterPlugin(pModule) == LWDP_OK)
        {
            int32_ moduleIndex = FindModule(pModule->GetModuleMODID());

        	ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_PLUGINMGR_MODULE_INDEX_ERROR, (moduleIndex >= 0), "Module Index Error");        
        	ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_PLUGINMGR_MODULE_INDEX_ERROR, (existIndex < 0 || existIndex == moduleIndex), "Module Index Error");        
        }
    }
    else
    {
    	return LWDP_PLUGINMGR_LOADMODULE_ERROR;
    }

    return LWDP_OK;
}
Ejemplo n.º 5
0
LWRESULT Cx_PluginLoader::UnloadPluginAll(bool force_unload)
{
	LWRESULT res  = LWDP_OK;
	LWRESULT stat = LWDP_ERROR;
	for(uint32_ i=0; i<m_modules.size(); ++i)
	{
		Ix_Module* pModule = m_modules[i]->module;
		ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_POINTER_IS_NULL, pModule, "Cx_PluginLoader::UnloadPluginAll Get Ix_Module Pointer Error");

		stat = UnloadPlugin(pModule->GetModuleMODID(), force_unload);
		if(stat != LWDP_OK)
			res = stat;
	}
	
	return res;
}
Ejemplo n.º 6
0
LWRESULT Cx_PluginLoader::InitializePlugins()
{
    long_ count = 0;

    for (long_ i = 0; i < (long_)m_modules.size(); i++)
    {
        if (m_modules[i]->inited)
        {
            continue;
        }

		Ix_Module* pModule = m_modules[i]->module;
	    ASSERT_CHECK_RET(LWDP_MODULE_LOG, 0, (pModule), "Module Pointor is NULL");
		RINOK(pModule->InitializePlugin());
		
        count++;
        m_modules[i]->inited = true;
    }

    return LWDP_OK;
}