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

📄 hxresmg.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    memset(pStatBuffer,0,sizeof(*pStatBuffer));	    if(stat((const char*)pPath, pStatBuffer) < 0)    {	rc = HXR_FAIL;    }    return rc;}IHXBuffer* HXExternalResourceManager::ConvertToAsciiString(char* pBuffer, UINT32 nBuffLen){    char* pOut = new char[nBuffLen*2+1];    char* pStartOut = pOut;    char Nibble;    IHXBuffer* pOutBuffer = new CHXBuffer;    pOutBuffer->AddRef();    for (int i = 0; i < (int)nBuffLen; i++)    {	Nibble = (*pBuffer >> 4) & 15;	*pOut= (Nibble > 9 ) ? Nibble + 55 : Nibble + 48;	pOut++;	Nibble = *pBuffer & 15;	*pOut= (Nibble > 9 ) ? Nibble + 55 : Nibble + 48;	pOut++;	pBuffer++;    }    *pOut = 0;    pOutBuffer->Set((UCHAR*)pStartOut, strlen(pStartOut)+1);    delete[] pStartOut;    return pOutBuffer;}IHXBuffer* HXExternalResourceManager::ChecksumFile(const char* pPath){    struct stat	    stat_struct;    md5_state_t	    MD5_data;    UCHAR	    tempbuf[16];    md5_init(&MD5_data);    if (HXR_OK != Stat(pPath, &stat_struct))    {        md5_finish(tempbuf, &MD5_data);	return NULL;    }     md5_append(&MD5_data,(UCHAR*)&(stat_struct),sizeof(stat_struct));     md5_finish(tempbuf, &MD5_data);    return ConvertToAsciiString((char*)tempbuf, sizeof(tempbuf));}HX_RESULTHXExternalResourceManager::SaveFileInfo(const char* pFileName,				         const char* pPath){    HX_RESULT rc = HXR_OK;   // set/reset cache info    if(!m_pPrefs)    {	return HXR_FAIL;    }    IHXBuffer* pStatInfo = ChecksumFile(pPath);    if(pStatInfo)    {	CHXString prefString;	prefString.Format("%s\\%s\\%s\\%s",			    EXT_RES_DATA_KEY,			    FILE_INFO_KEY,			    pFileName,			    CHECKSUM_KEY);	m_pPrefs->WritePref(prefString, pStatInfo);	HX_RELEASE(pStatInfo);    }    // now write out the langages supported in the resource file    IHXXResFile* pResFile;    if(HXR_OK == m_pHXXResPlugin->QueryInterface(IID_IHXXResFile, 						(void**)&pResFile))    {	HX_RESULT rc = HXR_OK;	// open res file and iterate through all of the languages	// it supports	pResFile->Open(pPath);	UINT32 ulLangID = 0;	rc = pResFile->GetFirstResourceLanguage(ulLangID);	while(HXR_OK == rc)	{	    CHXString prefString;	    IHXBuffer* pBuffer = new CHXBuffer;	    prefString.Format("%s\\%s\\%s\\%s\\%ld",				EXT_RES_DATA_KEY,				FILE_INFO_KEY,				pFileName,				LANGUAGE_KEY,				ulLangID);	    pBuffer->Set((BYTE*)"", 1);	    m_pPrefs->WritePref(prefString, pBuffer);	    HX_RELEASE(pBuffer);	    rc = pResFile->GetNextResourceLanguage(ulLangID);	};	HX_RELEASE(pResFile);    }    return rc;}HX_RESULTHXExternalResourceManager::LoadResourceFile(const char* pPath){    HX_RESULT rc = HXR_OK;    // MakeResFileObject only returns an IHXXResFile    // if there are any resources in the current language    IHXXResFile* pResFile = MakeResFileObject(pPath);    if (pResFile)    {	if(!m_pResourceList)	{	    m_pResourceList = new CHXSimpleList;	}    	m_pResourceList->AddTail(pResFile);    }    return rc;}BOOLHXExternalResourceManager::FileInfoCurrent(const char* pFileName, 					    const char* pPath){    BOOL rc = FALSE;    IHXBuffer* pStatInfo = ChecksumFile(pPath);    if(pStatInfo)    {	IHXBuffer* pPrefValue = NULL;	CHXString prefString;	prefString.Format("%s\\%s\\%s\\%s",			    EXT_RES_DATA_KEY,			    FILE_INFO_KEY,			    pFileName,			    CHECKSUM_KEY);	if(HXR_OK == m_pPrefs->ReadPref(prefString, pPrefValue) &&	    pPrefValue)	{	    const char* pActualPrefValue = (const char*)pPrefValue->GetBuffer();	    const char* pActualStatInfo = (const char*)pStatInfo->GetBuffer();	    if(strcmp(pActualPrefValue, pActualStatInfo) == 0)	    {		rc = TRUE;	    }	    HX_RELEASE(pPrefValue);	}	HX_RELEASE(pStatInfo);    }    return rc;}BOOLHXExternalResourceManager::ContainsCurrentLanguage(const char* pFileName,						   const char* pPath){#if defined (_MACINTOSH) || defined (_UNIX)    /* Temporary - Mac Installer does not write this pref yet -- XXXRA */	    return TRUE;#endif    BOOL rc = FALSE;    IHXBuffer* pLangInfo = NULL;    CHXString prefString;    prefString.Format("%s\\%s\\%s\\%s\\%ld",			EXT_RES_DATA_KEY,			FILE_INFO_KEY,			pFileName,			LANGUAGE_KEY,			m_ulLanguageID);    if(HXR_OK == m_pPrefs->ReadPref(prefString, pLangInfo))    {	rc = TRUE;	HX_RELEASE(pLangInfo);    }    return rc;}HX_RESULTHXExternalResourceManager::LoadResourceFiles(){    CFindFile*	pFileFinder	= NULL;    char*	pResFile	= NULL;    const char*	pFileExtension	= "*.xrs";    HX_RESULT   rc		= HXR_OK;    // find plugins with specified pattern    pFileFinder = CFindFile::CreateFindFile(m_pExternalResDir, 0, 					    pFileExtension);    if (NULL == pFileFinder)    {	rc = HXR_FAIL;	goto cleanup;    }    // collect plugin info.    pResFile = pFileFinder->FindFirst();    while (pResFile)    {	BOOL bLoadFile = FALSE;	const char* pResPath = pFileFinder->GetCurFilePath();	// only load the file if it has resources that reflect	// the current system language ID	if(!FileInfoCurrent(pResFile, pResPath))	{	    SaveFileInfo(pResFile, pResPath);	}	    	if(ContainsCurrentLanguage(pResFile, pResPath))	{	    rc = LoadResourceFile(pResPath);	}	if(HXR_OK != rc)	{	    // error - log it and keep on?	}	pResFile = pFileFinder->FindNext();    }    delete pFileFinder;cleanup:    return rc;}// HXExternalResourceReader methodsHXExternalResourceReader::HXExternalResourceReader(				     HXExternalResourceManager* pMgr):     m_lRefCount(0)    ,m_pResManager(pMgr)    ,m_pResourceList(NULL)    ,m_pDefaultRes(NULL){}HXExternalResourceReader::~HXExternalResourceReader(){    HX_DELETE(m_pResourceList);    HX_RELEASE(m_pDefaultRes);}// IUnknown methodsSTDMETHODIMP HXExternalResourceReader::QueryInterface(REFIID riid, void** ppvObj){    QInterfaceList qiList[] =        {            { GET_IIDHANDLE(IID_IHXExternalResourceReader), (IHXExternalResourceReader*)this },            { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXExternalResourceReader*)this },        };        return ::QIFind(qiList, QILISTSIZE(qiList), riid, ppvObj);}STDMETHODIMP_(ULONG32) HXExternalResourceReader::AddRef(){    return InterlockedIncrement(&m_lRefCount);}STDMETHODIMP_(ULONG32) HXExternalResourceReader::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {	return m_lRefCount;    }    delete this;    return 0;}STDMETHODIMPHXExternalResourceReader::SetDefaultResourceFile(			    const char* pResourcePath){    HX_RESULT rc = HXR_OK;    m_pDefaultRes = m_pResManager->MakeResFileObject(pResourcePath);    return rc;}IHXXResource*HXExternalResourceReader::GetResource(IHXXResFile* pResFile,				       UINT32 ulResourceType,				       UINT32 ulResourceID){    IHXXResource* pRes = NULL;    switch(ulResourceType)    {	case HX_RT_STRING:	{	    pRes = pResFile->GetString(ulResourceID);	}	break;	case HX_RT_DIALOG:	{	    pRes = pResFile->GetDialog(ulResourceID);	}	break;	case HX_RT_BITMAP:	{	    pRes = pResFile->GetBitmap(ulResourceID);	}	break;	default:	break;    }    return pRes;}STDMETHODIMP_(IHXXResource*)HXExternalResourceReader::GetResource(UINT32 ulResourceType,				    UINT32 ulResourceID){    IHXXResource* pRes = NULL;    if(m_pResourceList)    {	CHXSimpleList::Iterator i = m_pResourceList->Begin();	for (; i != m_pResourceList->End(); ++i)	{	    IHXXResFile* pResFile = (IHXXResFile*)(*i);	    pRes = GetResource(pResFile, ulResourceType, ulResourceID);	    if(pRes)	    {		break;	    }	}    }    if(!pRes &&	m_pDefaultRes)	// check default    {	pRes = GetResource(m_pDefaultRes, ulResourceType, ulResourceID);    }    return pRes;}HX_RESULTHXExternalResourceReader::Init(const char* pShortName,				CHXSimpleList* pResList){    HX_RESULT rc = HXR_OK;    if(pResList)    {	CHXSimpleList::Iterator i = pResList->Begin();	for (; i != pResList->End(); ++i)	{	    IHXXResFile* pResFile = (IHXXResFile*)(*i);	    if(pResFile->IncludesShortName(pShortName))	    {		if(!m_pResourceList)		{		    m_pResourceList = new CHXSimpleList;		}		m_pResourceList->AddTail(pResFile);	    }	}    }    return rc;}

⌨️ 快捷键说明

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