⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxpluginmanager.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
STDMETHODIMPHXPluginManager::FindPluginUsingValues( IHXValues* pCriteria,					REF(IUnknown*) pIUnkResult,					IUnknown* pIUnkOuter ){    DPRINTF(D_INFO, ("HXPluginManager()::FindPluginUsingValues()\n"));    // out    pIUnkResult = NULL;    CHXSimpleList   matches;    CHXSimpleList::Iterator iter = m_plugins.Begin();    for(; iter != m_plugins.End(); ++iter)    {	HXPlugin* pPlugin = (HXPlugin*) *iter;	if (pPlugin->DoesMatch(pCriteria))	{	    matches.AddTail(pPlugin);	}    }    HX_RESULT hr = HXR_FAIL;    if (matches.GetCount() > 0)    {        // return first match by default        HXPlugin* pPlug = (HXPlugin*) *(matches.Begin());#if (0)        if (matches.GetCount() > 1)        {            //            // strategy:            //            // with multiple matching plugins, pick first one with description "RealNetworks"            //	    for(iter = matches.Begin(); iter != matches.End(); ++iter)	    {                HXPlugin* pThisPlugin = (HXPlugin*) *iter;                if( IsRealNetworksPlugin(pThisPlugin) )                {                    // use this one                    pPlug = pThisPlugin;                    break;	                            }	    }        }#endif        hr = pPlug->GetInstance( pIUnkResult, pIUnkOuter );    }    return hr;}STDMETHODIMPHXPluginManager::FindPluginUsingStrings( char* PropName1, char* PropVal1,					char* PropName2, char* PropVal2,					char* PropName3, char* PropVal3,					REF(IUnknown*) pIUnkResult,					IUnknown* pIUnkOuter ){    DPRINTF(D_INFO, ("HXPluginManager()::FindPluginUsingStrings()\n"));        // out     pIUnkResult = NULL;    // PropName and PropVal have to to valid tuple    if ((PropName1 && !PropVal1)    ||	(PropName2 && !PropVal2)    ||	(PropName3 && !PropVal3)    ||	(!PropName1 && PropVal1)    ||	(!PropName2 && PropVal2)    ||	(!PropName3 && PropVal3))	return HXR_FAIL;    IHXValues* pValues;    HX_RESULT   retVal = HXR_FAIL;    CHXHeader* pHeader = new CHXHeader();    pHeader->QueryInterface(IID_IHXValues,  (void**)&pValues);    AddToValues(pValues, PropName1, PropVal1, eString);    AddToValues(pValues, PropName2, PropVal2, eString);    AddToValues(pValues, PropName3, PropVal3, eString);    retVal = FindPluginUsingValues( pValues, pIUnkResult, pIUnkOuter );    pValues->Release();    return retVal;}//// Call Unload() on each plugins (library unloads only if no plugin references)//voidHXPluginManager::UnloadDeadDLLs(){    DPRINTF(D_INFO, ("HXPluginManager()::UnloadDeadDLLs()\n"));        for(CHXSimpleList::Iterator iter = m_pluginDlls.Begin(); iter != m_pluginDlls.End(); ++iter)    {	HXPluginDLL* pPlugDLL = (HXPluginDLL*) *iter;	pPlugDLL->Unload();    }}STDMETHODIMPHXPluginManager::GetPlugin( ULONG32 ulIndex, REF(IUnknown*) pIUnkResult,					    IUnknown* pIUnkOuter ){    if( ulIndex <= (ULONG32)(m_plugins.GetCount()-1) && m_plugins.GetCount() )    {	LISTPOSITION pPos = m_plugins.FindIndex( ulIndex );	if (pPos)	{	    HXPlugin* pPlugin = (HXPlugin*) m_plugins.GetAt( pPos );	    if( pPlugin )	    {		return pPlugin->GetInstance( pIUnkResult, pIUnkOuter );	    }	}    }    return HXR_FAIL;}STDMETHODIMPHXPluginManager::UnloadPluginFromClassID(REFGUID GUIDClassID){    return HXR_NOTIMPL;}STDMETHODIMPHXPluginManager::UnloadPackageByName(const char* pName){    return HXR_NOTIMPL;}STDMETHODIMP HXPluginManager::FindPluginUsingStrings (char* PropName1,						    char* PropVal1,						    char* PropName2,						    char* PropVal2,						    char* PropName3,						    char* PropVal3,						    REF(IUnknown*) pRetUnk){    return FindPluginUsingStrings( PropName1, PropVal1, PropName2, PropVal2,				   PropName3, PropVal3, pRetUnk, NULL );}STDMETHODIMPHXPluginManager::FindImplementationFromClassID(    REFGUID GUIDClassID,    REF(IUnknown*) pIUnknownInstance){    return FindImplementationFromClassID( GUIDClassID, pIUnknownInstance, NULL, m_pContext );}STDMETHODIMP HXPluginManager::Close(){    DPRINTF(D_INFO, ("HXPluginManager()::Close()\n"));    // Release all dlls and associated plugins       CHXSimpleList::Iterator iter;           //HXPlugin    for(iter = m_plugins.Begin(); iter != m_plugins.End(); ++iter)    {	HXPlugin* pPlugin = (HXPlugin*) *iter;	pPlugin->Release();    }    m_plugins.RemoveAll();     //HXPluginDLL    for(iter = m_pluginDlls.Begin(); iter != m_pluginDlls.End(); ++iter)    {	HXPluginDLL* pLib = (HXPluginDLL*) *iter;	pLib->Release();    }    m_pluginDlls.RemoveAll();    //HXOtherDLL    for(iter = m_otherDlls.Begin(); iter != m_otherDlls.End(); ++iter)    {	HXOtherDLL* pLib = (HXOtherDLL*) *iter;	pLib->Release();    }    m_otherDlls.RemoveAll();    m_mountPoints.RemoveAll();    HX_RELEASE(m_pContext);    HX_RELEASE(m_pClassFactory);    return HXR_OK;}STDMETHODIMP HXPluginManager::SetRequiredPlugins (const char** ppszRequiredPlugins){    return HXR_OK;}HX_RESULT HXPluginManager::AddToValues(IHXValues* pValues, char* pPropName, char* pPropVal, eValueTypes eValueType){    if (!pPropName || !pPropVal)	return HXR_FAIL;    // trim value    CHXString theValue = (pPropVal);    theValue.TrimLeft();    theValue.TrimRight();    HX_RESULT hr = HXR_OK;    switch (eValueType)    {	case eString:	{	    IHXBuffer* pBuffer;	    CHXBuffer*	pCHXBuffer;	    pCHXBuffer = new CHXBuffer;	    pCHXBuffer->QueryInterface(IID_IHXBuffer, (void**) &pBuffer);	    pBuffer->Set((const unsigned char*)(const char*)theValue, strlen(theValue)+1);	    pValues->SetPropertyCString(pPropName, pBuffer);	    pBuffer->Release();            break;	}	case eInt:	{	    int val = atoi(theValue);	    pValues->SetPropertyULONG32(pPropName, (ULONG32)val);	    break;	}        default:            hr = HXR_NOTIMPL;            break;    }    return hr;}STDMETHODIMP_(ULONG32) HXPluginManager::GetNumOfPlugins(){    return m_plugins.GetCount();}STDMETHODIMP HXPluginManager::GetPlugin(ULONG32 ulIndex, REF(IUnknown*)  /*OUT*/ pInstance){    return GetPlugin( ulIndex, pInstance, NULL );}STDMETHODIMP HXPluginManager::FlushCache(){    return HXR_OK;}STDMETHODIMP HXPluginManager::SetCacheSize(ULONG32 nSizeKB){    return HXR_OK;}STDMETHODIMP HXPluginManager::ReadFromRegistry(){    DPRINTF(D_INFO, ("HXPluginManager()::ReadFromRegistry()\n"));    HX_RESULT result;    IHXBuffer* pBuffer = NULL;#if !defined(_STATICALLY_LINKED) || defined(HELIX_CONFIG_CONSOLIDATED_CORE)    const char* pPath = GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN);    pBuffer = HXBufferUtil::CreateBuffer(m_pClassFactory, pPath);#endif    // Set up a mount point with the default plugin location    result = AddPluginMountPoint(HXVER_SDK_PRODUCT, 0, 0, pBuffer);    HX_RELEASE(pBuffer);    return result;}/**********************************************************************	Plugin Enumeration*********************************************************************/BEGIN_INTERFACE_LIST_NOCREATE( HXPluginEnumerator )    INTERFACE_LIST_ENTRY_SIMPLE( IHXPluginSearchEnumerator )END_INTERFACE_LISTHXPluginEnumerator::HXPluginEnumerator() :    m_nIndex(0){}HXPluginEnumerator::~HXPluginEnumerator(){}STDMETHODIMP_( UINT32 )HXPluginEnumerator::GetNumPlugins(){    return m_plugins.GetCount();}STDMETHODIMP_( void )HXPluginEnumerator::GoHead(){    m_nIndex = 0;}STDMETHODIMPHXPluginEnumerator::GetNextPlugin( REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ){    // Initialize out params    pIUnkResult = NULL;    HX_RESULT res = GetPluginAt( m_nIndex, pIUnkResult, pIUnkOuter );    m_nIndex++;    return res;}STDMETHODIMPHXPluginEnumerator::GetNextPluginInfo( REF(IHXValues*) pRetValues ){    pRetValues = NULL;    HX_RESULT res = GetPluginInfoAt( m_nIndex, pRetValues );    m_nIndex++;    return res;}STDMETHODIMPHXPluginEnumerator::GetPluginAt( UINT32 index, REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ){    pIUnkResult = NULL;    HX_RESULT res = HXR_FAIL;    LISTPOSITION pos = m_plugins.FindIndex(index);    if (pos)    {	HXPlugin* pPlugin = (HXPlugin*) m_plugins.GetAt(pos);	if (pPlugin)	{	    res = pPlugin->GetInstance( pIUnkResult, pIUnkOuter );	}    }    return res;}STDMETHODIMPHXPluginEnumerator::GetPluginInfoAt( UINT32 index, REF(IHXValues*) pRetValues ){    // Initialize out params    pRetValues = NULL;    HX_RESULT res = HXR_FAIL;    LISTPOSITION pos = m_plugins.FindIndex(m_nIndex);    m_nIndex++;    if (pos)    {	HXPlugin* pPlugin = (HXPlugin*) m_plugins.GetAt(pos);	if (pPlugin)	{	    res = pPlugin->GetPluginInfo( pRetValues );	}    }    return res;}void HXPluginEnumerator::Add(HXPlugin* pPlugin){    HX_ASSERT(pPlugin);    m_plugins.AddTail(pPlugin);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -