definements.h

来自「自己改写的在WINCE上开发用的EVC++的FTP操作示例工程,希望能给相关人士」· C头文件 代码 · 共 140 行

H
140
字号
#ifndef INC_DEFINEMENTS_H
#define INC_DEFINEMENTS_H

#include <string>
#include <set>

//#define WSAGetLastError() errno

// definements for unicode support
#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

namespace nsHelper
{
#ifdef WIN32
	/// Class with static functions to get information about an error.
	class CErrorT
	{
	public:
		static DWORD GetLastError() { return ::GetLastError(); }
		
		static tstring GetErrorDescription(int iErrorCode = GetLastError())
		{
			LPVOID lpMsgBuf=NULL;
			FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
				NULL, iErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
				reinterpret_cast<LPTSTR>(&lpMsgBuf), 0, NULL);
			tstring strErrorDescription;
			if( lpMsgBuf )
			{
				strErrorDescription = reinterpret_cast<LPTSTR>(lpMsgBuf);
				LocalFree(lpMsgBuf);
			}
			return strErrorDescription;
		}
	};
#else
	/// Class with static functions to get information about an error.
	class CErrorT
	{
	public:
		static DWORD GetLastError() { return static_cast<DWORD>(-1); }
		
		static tstring GetErrorDescription(int iErrorCode = GetLastError())
		{
			return _T("ToDo: GetErrorDescription not implemented yet!");
		}
	};
#endif
	
	/// Class with static functions to do string conversions.
	class CCnv
	{
	public:
		static long TStringToLong(const tstring& strIn)
		{
			TCHAR* pStopString = 0;
#ifdef _UNICODE
			return wcstol(&*strIn.begin(), &pStopString, 10);
#else
			return strtol(&*strIn.begin(), &pStopString, 10);
#endif
		}
		
		static std::string ConvertToString(const tstring& strIn)
		{
			std::string strOut;
			return ConvertToString(strIn, strOut);
		}
		
		static std::string& ConvertToString(const tstring& strIn, std::string& strOut)
		{
#ifdef _UNICODE
			if( strIn.size() == 0 )
			{
				strOut.erase();
			}
			else
			{
				strOut.resize(strIn.size());
				wcstombs(&*strOut.begin(), strIn.c_str(), strOut.size());
			}
#else
			strOut = strIn;
#endif
			return strOut;
		}
		
		static tstring ConvertToTString(const char* szIn)
		{
			tstring strOut;
			return ConvertToTString(szIn, strOut);
		}
		
		static tstring& ConvertToTString(const char* szIn, tstring& strOut)
		{
#ifdef _UNICODE
			if( strlen(szIn) == 0 )
			{
				strOut.erase();
			}
			else
			{
				strOut.resize(strlen(szIn));
				mbstowcs(&*strOut.begin(), szIn, strOut.size());
			}
#else
			strOut = szIn;
#endif
			return strOut;
		}
	};
	
	/// @brief Calculates elapsed CPU time.
	///
	/// Is useful for calculating transferrates.
	class CTimer
	{
	public:
		CTimer() : m_dfStart(GetTickCount()) {}
		
		/// Restarts the timer.
		void Restart() { m_dfStart = GetTickCount(); }
		
		/// Get the elapsed time in seconds.
		double GetElapsedTime() const
		{
			return (static_cast<double>(GetTickCount()) - m_dfStart)/1000;
		}
		
	private:
		double m_dfStart; ///< elapsed CPU time for process (start of measurement)
	};
}

#endif // INC_DEFINEMENTS_H

⌨️ 快捷键说明

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