📄 hxcommn.cpp
字号:
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 */
#if defined(HELIX_FEATURE_DLLACCESS_SERVER)
else if (IsEqualCLSID(rclsid, CLSID_IHXDllAccess))
{
*ppUnknown = (IUnknown*)(IHXDllAccess*)(new DLLAccessServer);
if (*ppUnknown)
{
((IUnknown*)*ppUnknown)->AddRef();
return HXR_OK;
}
return HXR_OUTOFMEMORY;
}
#endif // HELIX_FEATURE_DLLACCESS_SERVER
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 + -