📄 hxcommn.cpp
字号:
else if(IsEqualCLSID(rclsid, CLSID_IHXKeyValueList)) { *ppUnknown = (IUnknown*)(IHXKeyValueList*)(new CKeyValueList()); if( !*ppUnknown ) { return HXR_OUTOFMEMORY; } ((IUnknown*)*ppUnknown)->AddRef(); return HXR_OK; }#if defined(HELIX_FEATURE_FILESYSTEMMGR) else if (IsEqualCLSID(rclsid, CLSID_IHXFileSystemManager)) { *ppUnknown = (IUnknown*)(IHXFileSystemManager*)(new HXFileSystemManager(m_pContext)); if( !*ppUnknown ) { return HXR_OUTOFMEMORY; } ((IUnknown*)*ppUnknown)->AddRef(); return HXR_OK; }#endif /* HELIX_FEATURE_FILESYSTEMMGR */ else if (IsEqualCLSID(rclsid, CLSID_IHXMutex)) { CHXMutex *pMutex = new CHXMutex(); if (pMutex) { return pMutex->QueryInterface(IID_IUnknown, (void**) ppUnknown); } }// Unix now implements this as a factory plugin. Windows and Mac may// do so someday too.#if (defined (_WINDOWS) || defined (_MACINTOSH)) && !defined(_WINCE) else if(IsEqualCLSID(rclsid, CLSID_IHXSiteWindowed)) { { IHXPreferences* pPreferences = NULL; IHXBuffer* pBuffer = NULL; BOOL bUseNewSite = TRUE; if (HXR_OK == m_pContext->QueryInterface(IID_IHXPreferences,(void**)&pPreferences)) { if (pPreferences->ReadPref("UseHXVideo", pBuffer) == HXR_OK) { bUseNewSite = (::atoi((char*) pBuffer->GetBuffer()) == 1); HX_RELEASE(pBuffer); } HX_RELEASE(pPreferences); } if (bUseNewSite) { goto classFactory; } }#ifdef _WIN32 // Can not use the plugin handler to create the // site, since it uses the same class ID as // pnvideo, and the plugin handler gets REALLY // confused. // futher we can not use DLL access, since we WANT to keep // a reference on the DLL object created. UINT32 uDLLNameLen = 256; char szDllName[256]; /* Flawfinder: ignore */ DLLAccess::CreateName("pnol", "pnoldvideo", szDllName, uDLLNameLen); const char* pPath = NULL; CHXString fileName; pPath = GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN); fileName = pPath; fileName += "\\"; fileName += szDllName; HINSTANCE hinst = LoadLibrary(fileName); FPCREATEINSTANCE fpCreateInstance = (FPCREATEINSTANCE) GetProcAddress(hinst, HXCREATEINSTANCESTR); *ppUnknown = 0; if (fpCreateInstance) { fpCreateInstance((IUnknown**) ppUnknown); IHXPlugin* pPlug = NULL; if (HXR_OK == (*(IUnknown**)ppUnknown)->QueryInterface(IID_IHXPlugin, (void**)&pPlug)) { pPlug->InitPlugin(m_pContext); HX_RELEASE(*(IUnknown**)ppUnknown); fpCreateInstance((IUnknown**) ppUnknown); } return HXR_OK; } return HXR_FAIL; }#endif#ifdef _MACINTOSH goto classFactory;/* { *ppUnknown = (IUnknown*)(IHXSiteWindowed*)(new CHXSiteWindowed(m_pContext)); } return ((IUnknown*)*ppUnknown)->QueryInterface(IID_IHXSiteWindowed, (void**)ppUnknown);*/ }#endif#endif#if defined(HELIX_FEATURE_VIDEO) && defined (HELIX_FEATURE_MISU) else if(IsEqualCLSID(rclsid, CLSID_IHXMultiInstanceSiteUserSupplier)) { *ppUnknown = (IUnknown*)(IHXMultiInstanceSiteUserSupplier*)(new CHXMultiInstanceSiteUserSupplier()); if( !*ppUnknown ) { return HXR_OUTOFMEMORY; } return ((IUnknown*)*ppUnknown)-> QueryInterface(IID_IHXMultiInstanceSiteUserSupplier, (void**)ppUnknown); }#endif /* HELIX_FEATURE_VIDEO */#if !defined(_STATICALLY_LINKED) else if(IsEqualCLSID(rclsid, CLSID_IHXPluginGroupEnumerator)) { IHXPlugin2Handler* pPlugin2Handler = NULL; m_pContext->QueryInterface ( IID_IHXPlugin2Handler, (void**)&pPlugin2Handler ); *ppUnknown = (IUnknown*)(IHXPluginGroupEnumerator*) ( new CHXPlugin2GroupEnumerator(pPlugin2Handler) ); if( !*ppUnknown ) { return HXR_OUTOFMEMORY; } HX_RELEASE(pPlugin2Handler); return ((IUnknown*)*ppUnknown)->QueryInterface ( IID_IHXPluginGroupEnumerator, (void**)ppUnknown ); }#endif /* _STATICALLY_LINKED */ else if (IsEqualCLSID(rclsid, CLSID_IHXDllAccess)) { *ppUnknown = (IUnknown*)(IHXDllAccess*)(new DLLAccessServer); if (*ppUnknown) { ((IUnknown*)*ppUnknown)->AddRef(); return HXR_OK; } return HXR_OUTOFMEMORY; } else {classFactory: // Try the factory plugins IHXPlugin2Handler* pPlugin2Handler = NULL; m_pContext->QueryInterface ( IID_IHXPlugin2Handler, (void**)&pPlugin2Handler ); *ppUnknown = NULL; IUnknown* pIUnknownInstance = NULL; if(pPlugin2Handler) { if ( SUCCEEDED ( pPlugin2Handler->FindImplementationFromClassID ( rclsid, pIUnknownInstance ) ) ) { *ppUnknown = pIUnknownInstance; HX_RELEASE(pPlugin2Handler); return HXR_OK; } }#if defined(HELIX_FEATURE_PLUGINHANDLER1) else { // The encoder still uses the old PluginHandler.. // Try the factory plugins PluginHandler* pPluginHandler = NULL; m_pContext->QueryInterface ( IID_IHXPluginHandler, (void**)&pPluginHandler ); *ppUnknown = NULL; if(pPluginHandler) { PluginHandler::Factory* pFactories; PluginHandler::Plugin* pPlugin; CHXSimpleList::Iterator i; pFactories = pPluginHandler->m_factory_handler; for(i = pFactories->m_pPlugins->Begin(); i != pFactories->m_pPlugins->End(); ++i) { IUnknown* pInstance = 0; pPlugin = (PluginHandler::Plugin*)(*i); pPlugin->GetInstance(&pInstance); if(pInstance) { HX_RESULT res; IHXPlugin* pFPlugin = 0; res = pInstance->QueryInterface(IID_IHXPlugin, (void**)&pFPlugin); if(res == HXR_OK) { IHXCommonClassFactory* pClassFactory; pFPlugin->InitPlugin(m_pContext); pFPlugin->Release(); res = pInstance->QueryInterface( IID_IHXCommonClassFactory, (void**)&pClassFactory); if(HXR_OK == res) { res = pClassFactory->CreateInstance(rclsid, ppUnknown); if(HXR_OK != res) *ppUnknown = NULL; pClassFactory->Release(); } } pInstance->Release(); pPlugin->ReleaseInstance(); if(*ppUnknown) { return HXR_OK; } } } } HX_RELEASE(pPluginHandler); }#endif /* HELIX_FEATURE_PLUGINHANDLER1 */ HX_RELEASE(pPlugin2Handler); } *ppUnknown = NULL; return HXR_NOINTERFACE;}/************************************************************************ * Method: * IHXController::CreateInstanceAggregatable * Purpose: * Creates instances of common objects supported by the system, * like IHXBuffer, IHXPacket, IHXValues, etc. * * This method is similar to Window's CoCreateInstance() in its * purpose, except that it only creates objects of a well known * types. * * NOTE 1: Unlike CreateInstance, this method will create internal * objects that support Aggregation. * * NOTE 2: The output interface is always the non-delegating * IUnknown. */STDMETHODIMP HXCommonClassFactory::CreateInstanceAggregatable( REFCLSID /*IN*/ rclsid, REF(IUnknown*) /*OUT*/ pUnknown, IUnknown* /*IN*/ pUnkOuter){ pUnknown = NULL; return HXR_NOINTERFACE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -