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

📄 definements.h

📁 自己改写的在WINCE上开发用的EVC++的FTP操作示例工程,希望能给相关人士提供帮助.
💻 H
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -