Index: src/libchcore/TBaseException.cpp
===================================================================
diff -u
--- src/libchcore/TBaseException.cpp	(revision 0)
+++ src/libchcore/TBaseException.cpp	(revision 8e19bdbb52f053c078c1a7f4e6938493374067af)
@@ -0,0 +1,57 @@
+#include "stdafx.h"
+#include "TBaseException.h"
+#include <atltrace.h>
+
+BEGIN_CHCORE_NAMESPACE
+
+TBaseException::TBaseException(EGeneralErrors eErrorCode, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction) :
+	m_eErrorCode(eErrorCode),
+	m_pszMsg(pszMsg),
+	m_bDeleteMsg(false),
+	m_pszFile(pszFile),
+	m_stLineNumber(stLineNumber),
+	m_pszFunction(pszFunction)
+{
+	ATLTRACE(_T("*** Base Exception is being thrown:\n\tMsg: %s\n\tError code: %ld\n\tFile: %s\n\tLine number: %ld\n\tFunction: %s\n"), pszMsg, eErrorCode, pszFile, stLineNumber, pszFunction);
+}
+
+TBaseException::TBaseException(EGeneralErrors eErrorCode, const char* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction) :
+	m_eErrorCode(eErrorCode),
+	m_pszMsg(NULL),
+	m_bDeleteMsg(false),
+	m_pszFile(pszFile),
+	m_stLineNumber(stLineNumber),
+	m_pszFunction(pszFunction)
+{
+	ATLTRACE(_T("*** Base Exception is being thrown:\n\tMsg: %S\n\tError code: %ld\n\tFile: %s\n\tLine number: %ld\n\tFunction: %s\n"), pszMsg, eErrorCode, pszFile, stLineNumber, pszFunction);
+	if(pszMsg)
+	{
+		size_t stMsgLen = strlen(pszMsg);
+		m_pszMsg = new wchar_t[stMsgLen + 1];
+		
+		size_t stResult = 0;
+		mbstowcs_s(&stResult, const_cast<wchar_t*>(m_pszMsg), stMsgLen + 1, pszMsg, _TRUNCATE);
+	}
+}
+
+TBaseException::~TBaseException()
+{
+	if(m_bDeleteMsg)
+		delete [] m_pszMsg;
+}
+
+void TBaseException::GetErrorInfo(wchar_t* pszBuffer, size_t stMaxBuffer) const
+{
+	_snwprintf_s(pszBuffer, stMaxBuffer, _TRUNCATE, _T("%s (error code: %ld)"),
+		m_pszMsg, m_eErrorCode);
+	pszBuffer[stMaxBuffer - 1] = _T('\0');
+}
+
+void TBaseException::GetDetailedErrorInfo(wchar_t* pszBuffer, size_t stMaxBuffer) const
+{
+	_snwprintf_s(pszBuffer, stMaxBuffer, _TRUNCATE, _T("%s\r\nError code: %ld\r\nFile: %s\r\nFunction: %s\r\nLine no: %lu"),
+		m_pszMsg, m_eErrorCode, m_pszFile, m_pszFunction, m_stLineNumber);
+	pszBuffer[stMaxBuffer - 1] = _T('\0');
+}
+
+END_CHCORE_NAMESPACE
Index: src/libchcore/TBaseException.h
===================================================================
diff -u
--- src/libchcore/TBaseException.h	(revision 0)
+++ src/libchcore/TBaseException.h	(revision 8e19bdbb52f053c078c1a7f4e6938493374067af)
@@ -0,0 +1,64 @@
+/***************************************************************************
+*   Copyright (C) 2001-2013 by J�zef Starosczyk                           *
+*   ixen@copyhandler.com                                                  *
+*                                                                         *
+*   This program is free software; you can redistribute it and/or modify  *
+*   it under the terms of the GNU Library General Public License          *
+*   (version 2) as published by the Free Software Foundation;             *
+*                                                                         *
+*   This program is distributed in the hope that it will be useful,       *
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+*   GNU General Public License for more details.                          *
+*                                                                         *
+*   You should have received a copy of the GNU Library General Public     *
+*   License along with this program; if not, write to the                 *
+*   Free Software Foundation, Inc.,                                       *
+*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+***************************************************************************/
+#ifndef __TBASEEXCEPTION_H__
+#define __TBASEEXCEPTION_H__
+
+#include "libchcore.h"
+#include "ErrorCodes.h"
+
+BEGIN_CHCORE_NAMESPACE
+
+class LIBCHCORE_API TBaseException : public virtual std::exception
+{
+public:
+	TBaseException(EGeneralErrors eErrorCode, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction);
+	TBaseException(EGeneralErrors eErrorCode, const char* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction);
+
+	virtual ~TBaseException();
+
+	// error information
+	EGeneralErrors GetErrorCode() const { return m_eErrorCode; }
+
+	virtual void GetErrorInfo(wchar_t* pszBuffer, size_t stMaxBuffer) const;
+	virtual void GetDetailedErrorInfo(wchar_t* pszBuffer, size_t stMaxBuffer) const;
+
+private:
+	TBaseException();
+
+	// location info
+	const wchar_t* GetSourceFile() const { return m_pszFile; }
+	size_t GetSourceLineNumber() const { return m_stLineNumber; }
+	const wchar_t* GetFunctionName() const { return m_pszFunction; }
+
+protected:
+	// what happened?
+	EGeneralErrors m_eErrorCode;
+
+	// where it happened?
+	const wchar_t* m_pszMsg;
+	bool m_bDeleteMsg;
+
+	const wchar_t* m_pszFile;
+	const wchar_t* m_pszFunction;
+	size_t m_stLineNumber;
+};
+
+END_CHCORE_NAMESPACE
+
+#endif
Index: src/libchcore/TStringException.cpp
===================================================================
diff -u
--- src/libchcore/TStringException.cpp	(revision 0)
+++ src/libchcore/TStringException.cpp	(revision 8e19bdbb52f053c078c1a7f4e6938493374067af)
@@ -0,0 +1,17 @@
+#include "stdafx.h"
+#include "TStringException.h"
+
+BEGIN_CHCORE_NAMESPACE
+
+TStringException::TStringException(EGeneralErrors eErrorCode, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction) :
+	TBaseException(eErrorCode, pszMsg, pszFile, stLineNumber, pszFunction)
+{
+}
+
+TStringException::TStringException(EGeneralErrors eErrorCode, const char* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction) :
+	TBaseException(eErrorCode, pszMsg, pszFile, stLineNumber, pszFunction)
+{
+}
+
+
+END_CHCORE_NAMESPACE
Index: src/libchcore/TStringException.h
===================================================================
diff -u
--- src/libchcore/TStringException.h	(revision 0)
+++ src/libchcore/TStringException.h	(revision 8e19bdbb52f053c078c1a7f4e6938493374067af)
@@ -0,0 +1,43 @@
+/***************************************************************************
+*   Copyright (C) 2001-2013 by J�zef Starosczyk                           *
+*   ixen@copyhandler.com                                                  *
+*                                                                         *
+*   This program is free software; you can redistribute it and/or modify  *
+*   it under the terms of the GNU Library General Public License          *
+*   (version 2) as published by the Free Software Foundation;             *
+*                                                                         *
+*   This program is distributed in the hope that it will be useful,       *
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+*   GNU General Public License for more details.                          *
+*                                                                         *
+*   You should have received a copy of the GNU Library General Public     *
+*   License along with this program; if not, write to the                 *
+*   Free Software Foundation, Inc.,                                       *
+*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+***************************************************************************/
+#ifndef __TSTRINGEXCEPTION_H__
+#define __TSTRINGEXCEPTION_H__
+
+#include "libchcore.h"
+#include "ErrorCodes.h"
+#include "TBaseException.h"
+
+#define THROW_STRING_EXCEPTION(error_code, err_msg)\
+	throw TStringException(error_code, err_msg, __FILEW__, __LINE__, __FUNCTIONW__)
+
+BEGIN_CHCORE_NAMESPACE
+
+class LIBCHCORE_API TStringException : public TBaseException
+{
+public:
+	TStringException(EGeneralErrors eErrorCode, const wchar_t* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction);
+	TStringException(EGeneralErrors eErrorCode, const char* pszMsg, const wchar_t* pszFile, size_t stLineNumber, const wchar_t* pszFunction);
+
+private:
+	TStringException();
+};
+
+END_CHCORE_NAMESPACE
+
+#endif