Пример #1
0
LWRESULT Cx_PluginLoader::RegisterPlugin(const Ix_Module* pModule)
{
	ASSERT_CHECK_RET(LWDP_MODULE_LOG, LWDP_PARAMETER_ERROR, (pModule), "RegisterPlugin Para Error");
    if (FindModule(pModule->GetModuleMODID()) >= 0)
    {
        return false;
    }

    MODULE moduleInfo;
	moduleInfo.modid  = pModule->GetModuleMODID();
    moduleInfo.module = (Ix_Module *)pModule;
    moduleInfo.owned  = (pModule->GetModuleInstance())? true: false;
    moduleInfo.inited = false;

    int32_ moduleIndex = GetPluginIndex(pModule->GetModuleMODID());
    if (moduleIndex >= 0)
    {
    	ASSERT_CHECK_RET(LWDP_MODULE_LOG, false, (m_modules[moduleIndex] != NULL), "Get Plugin Index Error");        
        *m_modules[moduleIndex] = moduleInfo;
    }
    else
    {
        moduleIndex = m_modules.size();
        MODULE* module = new MODULE;
        *module = moduleInfo;
        m_modules.push_back(module);
    }

    RegisterClassEntryTable(moduleIndex);

    return LWDP_OK;
}
Пример #2
0
bool Cx_PluginLoader::RegisterPlugin(HMODULE instance)
{
    if (FindModule(instance) >= 0)
    {
        return false;
    }

    Ix_Module* pModule = GetModule(instance);

    if (pModule != NULL)
    {
        MODULE moduleInfo;

        moduleInfo.hdll = instance;
        moduleInfo.module = pModule;
        moduleInfo.owned = false;
        moduleInfo.inited = false;
        GetModuleFileNameW(moduleInfo.hdll, moduleInfo.filename, MAX_PATH);

        int moduleIndex = GetPluginIndex(moduleInfo.filename);
        if (moduleIndex >= 0)
        {
            ASSERT(m_modules[moduleIndex] != NULL);
            *m_modules[moduleIndex] = moduleInfo;
        }
        else
        {
            moduleIndex = x3::GetSize(m_modules);
            MODULE* module = new MODULE;
            *module = moduleInfo;
            m_modules.push_back(module);
        }

        RegisterClassEntryTable(moduleIndex);

        return true;
    }

    return false;
}