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

📄 myexception.cpp

📁 自定义HttpClient类
💻 CPP
字号:

#include "stdafx.h"
#include "MyException.h"

#pragma warning (disable: 4290)	// avoids 'C++ Exception Specification ignored' message
#pragma warning (disable: 4996)	// avoids 'This function or variable may be unsafe' message


/*!
 * \brief	The namespace of the Ryeol's library
 *
 * This is the namespace for source codes written by Jo Hyeong-ryeol.
 */
namespace Ryeol {

/*!
 * This is a default constructor with no argument.
 */
errmsg_exceptionA::errmsg_exceptionA (void)
	throw ()
{
	m_szErrMsg = NULL ;
}

/*!
 * This is a constructor with an initial error message.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param szErrMsg		[in] An initial error message.
 */
errmsg_exceptionA::errmsg_exceptionA (LPCSTR szErrMsg)
	throw ()
{
	m_szErrMsg = NULL ;
	if ( szErrMsg == NULL )
		return ;

	seterrmsg (szErrMsg) ;
}

/*!
 * This is a copy constructor.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param ee			[in] An errmsg_exceptionA object.
 */
errmsg_exceptionA::errmsg_exceptionA (const errmsg_exceptionA & ee)
	throw ()
{
	m_szErrMsg = NULL ;
	operator=(ee) ;
}

/*!
 * This is a default destructor.
 */
errmsg_exceptionA::~errmsg_exceptionA (void)
	throw ()
{
	::free (m_szErrMsg) ;
}

/*!
 * This method returns an error message. It guarantees that it does
 * not return NULL (Returns "NULL" instead of NULL pointer). 
 * This method equals to the errmsg method in Ansi version.
 *
 * \return				A message describing the error.
 * \sa					errmsg
 */
LPCSTR errmsg_exceptionA::what (void) const
	throw ()
{
	return errmsg () ;
}

/*!
 * This method returns an error message. It guarantees that it does
 * not return NULL (Returns "NULL" instead of NULL pointer).
 *
 * \return				A message describing the error.
 */
LPCSTR errmsg_exceptionA::errmsg (void) const
	throw ()
{
	if ( m_szErrMsg == NULL )
		return "NULL" ;

	return m_szErrMsg ;
}

/*!
 * This method assigns a new error message. If memory allocation failed,
 * NULL is assigned.
 *
 * \param szErrMsg		A new error message.
 */
void errmsg_exceptionA::seterrmsg (LPCSTR szErrMsg)
	throw ()
{
	::free (m_szErrMsg) ;
	m_szErrMsg = NULL ;

	if ( szErrMsg == NULL )
		return ;

	size_t		cchErrMsg = ::strlen (szErrMsg) ;
	m_szErrMsg = (LPSTR) ::malloc (sizeof (CHAR) * (cchErrMsg + 1)) ;
	if ( m_szErrMsg == NULL )
		return ;

	::strcpy (m_szErrMsg, szErrMsg) ;
}

/*!
 * This operator assigns an error message using seterrmsg method.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param ee			[in] An errmsg_exceptionA object.
 * \return				The exception object itself.
 */
errmsg_exceptionA & errmsg_exceptionA::operator=(const errmsg_exceptionA & ee)
	throw ()
{
	if ( this == &ee )
		return *this ;

	seterrmsg (ee.errmsg ()) ;
	return *this ;
}


/*!
 * This is a default constructor with no argument.
 */
errmsg_exceptionW::errmsg_exceptionW (void)
	throw ()
{
	m_szErrMsg = NULL ;
}

/*!
 * This is a constructor with an initial error message.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param szErrMsg		[in] An initial error message.
 */
errmsg_exceptionW::errmsg_exceptionW (LPCWSTR szErrMsg)
	throw ()
{
	m_szErrMsg = NULL ;
	if ( szErrMsg == NULL )
		return ;

	seterrmsg (szErrMsg) ;
}

/*!
 * This is a copy constructor.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param ee			[in] An errmsg_exceptionA object.
 */
errmsg_exceptionW::errmsg_exceptionW (const errmsg_exceptionW & ee)
	throw ()
{
	operator=(ee) ;
}

/*!
 * This is a default destructor.
 */
errmsg_exceptionW::~errmsg_exceptionW (void)
	throw ()
{
	::free (m_szErrMsg) ;
}

/*!
 * This is not supported in Unicode version.
 * It always returns "errmsg_exceptionW".
 *
 * \return				"errmsg_exceptionW"
 */
LPCSTR errmsg_exceptionW::what (void) const
	throw ()
{
	return "errmsg_exceptionW" ;
}

/*!
 * This method returns an error message. It guarantees that it does
 * not return NULL (Returns "NULL" instead of NULL pointer).
 *
 * \return				A message describing the error.
 */
LPCWSTR errmsg_exceptionW::errmsg (void) const
	throw ()
{
	if ( m_szErrMsg == NULL )
		return L"NULL" ;

	return m_szErrMsg ;
}

/*!
 * This method assigns a new error message. If memory allocation failed,
 * NULL is assigned.
 *
 * \param szErrMsg		A new error message.
 */
void errmsg_exceptionW::seterrmsg (LPCWSTR szErrMsg)
	throw ()
{
	::free (m_szErrMsg) ;
	m_szErrMsg = NULL ;

	if ( szErrMsg == NULL )
		return ;

	size_t		cchErrMsg = ::wcslen (szErrMsg) ;
	m_szErrMsg = (LPWSTR) ::malloc (sizeof (WCHAR) * (cchErrMsg + 1)) ;
	if ( m_szErrMsg == NULL )
		return ;

	::wcscpy (m_szErrMsg, szErrMsg) ;
}

/*!
 * This operator assigns an error message using seterrmsg method.
 * If memory allocation failed, the error message will not be copied
 * and Internal error message will point to NULL.
 *
 * \param ee			[in] An errmsg_exceptionA object.
 * \return				The exception object itself.
 */
errmsg_exceptionW & errmsg_exceptionW::operator=(const errmsg_exceptionW & ee)
	throw ()
{
	if ( this == &ee )
		return *this ;

	seterrmsg (ee.m_szErrMsg) ;
	return *this ;
}


/*!
 * This is a default constructor with no argument.
 */
varerrmsg_exceptionA::varerrmsg_exceptionA (void)
	throw ()
: errmsg_exceptionA ()
{
	;
}

/*!
 * This is a constructor with a format string and optional arguments.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 */
varerrmsg_exceptionA::varerrmsg_exceptionA (LPCSTR szErrMsg, ...)
	throw ()
{
	va_list		args ;

	va_start (args, szErrMsg) ;
	seterrmsg (szErrMsg, args) ;
	va_end (args) ;
}

/*!
 * This is a constructor with a format string and a pointer to list of arguments.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 * \param args			[in] A pointer to list of arguments 
 */
varerrmsg_exceptionA::varerrmsg_exceptionA (LPCSTR szErrMsg, va_list args)
	throw ()
{
	seterrmsg (szErrMsg, args) ;
}

/*!
 * This method assigns a new error message using _vsnprintf.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 */
void varerrmsg_exceptionA::seterrmsg (LPCSTR szErrMsg, ...)
	throw ()
{
	va_list		args ;

	va_start (args, szErrMsg) ;
	seterrmsg (szErrMsg, args) ;
	va_end (args) ;
}

/*!
 * This method assigns a new error message using _vsnprintf.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 * \param args			[in] A pointer to list of arguments 
 */
void varerrmsg_exceptionA::seterrmsg (LPCSTR szErrMsg, va_list args)
	throw ()
{
	if ( szErrMsg == NULL ) {
		errmsg_exceptionA::seterrmsg (szErrMsg) ;
		return ;
	}

	CHAR			szBuff[EXCEPTION_BUFF_SIZE] ;
	int				cchWritten ;
	cchWritten = _vsnprintf (szBuff, EXCEPTION_BUFF_SIZE - 1, szErrMsg, args) ;

	// If the error message exceeds the buffer size...
	if ( cchWritten == -1 )
		szBuff[EXCEPTION_BUFF_SIZE - 1] = '\0' ;
	// If an error occured..
	else if ( cchWritten < 0 ) {
		errmsg_exceptionA::seterrmsg (NULL) ;
		return ;
	} else
		szBuff[cchWritten] = '\0' ;

	errmsg_exceptionA::seterrmsg (szBuff) ;
}


/*!
 * This is a default constructor with no argument.
 */
varerrmsg_exceptionW::varerrmsg_exceptionW (void)
	throw ()
: errmsg_exceptionW ()
{
	;
}

/*!
 * This is a constructor with a format string and optional arguments.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 */
varerrmsg_exceptionW::varerrmsg_exceptionW (LPCWSTR szErrMsg, ...)
	throw ()
{
	va_list		args ;

	va_start (args, szErrMsg) ;
	seterrmsg (szErrMsg, args) ;
	va_end (args) ;
}

/*!
 * This is a constructor with a format string and a pointer to list of arguments.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 * \param args			[in] A pointer to list of arguments 
 */
varerrmsg_exceptionW::varerrmsg_exceptionW (LPCWSTR szErrMsg, va_list args)
	throw ()
{
	seterrmsg (szErrMsg, args) ;
}

/*!
 * This is not supported in Unicode version.
 * It always returns "varerrmsg_exceptionW".
 *
 * \return				"varerrmsg_exceptionW"
 */
LPCSTR varerrmsg_exceptionW::what () const
	throw ()
{
	return "varerrmsg_exceptionW" ;
}

/*!
 * This method assigns a new error message using _vsnwprintf.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 */
void varerrmsg_exceptionW::seterrmsg (LPCWSTR szErrMsg, ...)
	throw ()
{
	va_list		args ;

	va_start (args, szErrMsg) ;
	seterrmsg (szErrMsg, args) ;
	va_end (args) ;
}

/*!
 * This method assigns a new error message using _vsnwprintf.
 * The stored error message can not exceed EXCEPTION_BUFF_SIZE - 1 characters.
 * If an error occured, the stored error messsage will be NULL.
 *
 * \param szErrMsg		[in] A format-control error message 
 * \param args			[in] A pointer to list of arguments 
 */
void varerrmsg_exceptionW::seterrmsg (LPCWSTR szErrMsg, va_list args)
	throw ()
{
	if ( szErrMsg == NULL ) {
		errmsg_exceptionW::seterrmsg (szErrMsg) ;
		return ;
	}

	WCHAR			szBuff[EXCEPTION_BUFF_SIZE] ;
	int				cchWritten ;
	cchWritten = _vsnwprintf (szBuff, EXCEPTION_BUFF_SIZE - 1, szErrMsg, args) ;

	// If the error message exceeds the buffer size...
	if ( cchWritten == -1 )
		szBuff[EXCEPTION_BUFF_SIZE - 1] = '\0' ;
	// If an error occured..
	else if ( cchWritten < 0 ) {
		errmsg_exceptionW::seterrmsg (NULL) ;
		return ;
	} else
		szBuff[cchWritten] = '\0' ;

	errmsg_exceptionW::seterrmsg (szBuff) ;
}

}

⌨️ 快捷键说明

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