www.pudn.com > NeroSDK-v1.06.zip > audiobase.cpp


/****************************************************************************** 
|* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
|* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
|* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
|* PARTICULAR PURPOSE. 
|*  
|* Copyright 1995-2005 Nero AG. All Rights Reserved. 
|*----------------------------------------------------------------------------- 
|* NeroSDK / AudioPluginManager 
|* 
|* FILE: audiobase.cpp 
|* 
|* PURPOSE: Implementation of the CStatus helper class 
******************************************************************************/ 
 
#include "stdafx.h" 
#include "AudioBase.h" 
 
///////////////////////////////////////////////////////////////////// CStatus // 
 
CStatus::CStatus(DWORD syserror) 
:	m_lRef			(1), 
	m_dwErr			(syserror), 
	m_eAudioError	(AE_Undefined), 
	m_category		(ESC_General) 
{} 
 
CStatus::CStatus(EAudioError audioerror) 
:	m_lRef			(1), 
	m_dwErr			(0), 
	m_eAudioError	(audioerror), 
	m_category		(ESC_General) 
{} 
 
CStatus::CStatus(const char *szError) 
:	m_lRef			(1), 
	m_dwErr			(0), 
	m_eAudioError	(AE_Undefined), 
	m_csError		(szError), 
	m_category		(ESC_General) 
{} 
																// IUnknown 
 
STDMETHODIMP CStatus::QueryInterface(REFIID riid, 
										void __RPC_FAR *__RPC_FAR *ppObj) 
{ 
	if(!ppObj) 
	{ 
		ASSERT(FALSE); 
		 
		return E_INVALIDARG; 
	} 
 
	*ppObj = NULL; 
 
	if(IsEqualIID(riid, IID_IUnknown)) 
		*ppObj = static_cast(static_cast(this)); 
	else 
	if(IsEqualIID(riid, IID_IStatus)) 
		*ppObj = static_cast(this); 
	else 
	if(IsEqualIID(riid, IID_IStatusCategory)) 
	{ 
		if(ESC_General != m_category) 
			*ppObj = static_cast(this); 
	} 
 
	if(*ppObj) 
		AddRef(); 
 
	return *ppObj? S_OK: E_NOINTERFACE; 
} 
     
STDMETHODIMP_(ULONG) CStatus::AddRef() 
{ 
	InterlockedIncrement(&m_lRef); 
 
	return m_lRef; 
} 
             
STDMETHODIMP_(ULONG) CStatus::Release() 
{ 
	InterlockedDecrement(&m_lRef); 
 
	if(!m_lRef) 
	{ 
		delete this; 
 
		return 0; 
	} 
 
	return m_lRef; 
} 
																// IStatus 
const char * CStatus::GetDescription() 
{ 
	return m_csError; 
} 
 
EAudioError CStatus::GetAudioError() 
{ 
	return m_eAudioError; 
} 
 
DWORD CStatus::GetSysError() 
{ 
	return m_dwErr; 
} 
 
void CStatus::SetCategory(EStatusCategory cat) 
{ 
	m_category = cat; 
} 
 
EStatusCategory CStatus::GetCategory() 
{ 
	return m_category; 
}