亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utils.cpp

?? 這個動態鏈接庫是Socket通過COm串口實現數據通信
?? CPP
字號:
///////////////////////////////////////////////////////////////////////////////
//
// File           : $Workfile: Utils.cpp $
// Version        : $Revision: 2 $
// Function       : 
//
// Author         : $Author: Len $
// Date           : $Date: 3/06/02 11:19 $
//
// Notes          : 
//
// Modifications  :
//
// $Log: /Web Articles/SocketServers/EchoServer/JetByteTools/Win32Tools/Utils.cpp $
// 
// 2     3/06/02 11:19 Len
// Send Output() to debug stream as well as all the other places - needs
// rationalising as different projects have different requirements.
// 
// 1     20/05/02 11:02 Len
// 
// 4     13/05/02 13:42 Len
// Bug fix and code cleaning in GetFileVersion()
// 
// 3     10/05/02 19:25 Len
// Lint options and code cleaning.
// 
// 2     10/05/02 8:09 Len
// Added SetLogFileName()
// 
// 1     9/05/02 18:47 Len
// 
///////////////////////////////////////////////////////////////////////////////
//
// Copyright 1997 - 2002 JetByte Limited.
//
///////////////////////////////////////////////////////////////////////////////

#include "Utils.h"
#include "Exception.h"
#include "CriticalSection.h"

#include <memory>
#include <iostream>
#include <fstream>

#ifdef _UNICODE
typedef std::wfstream _tfstream;
#else
typedef std::fstream _tfstream;
#endif

#include "Lmcons.h"     // UNLEN

///////////////////////////////////////////////////////////////////////////////
// Lint options
//
//lint -save
//
//lint -esym(534, swprintf, wprintf)   ignoring return value
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Using directives
///////////////////////////////////////////////////////////////////////////////

using std::auto_ptr;
using std::endl;

///////////////////////////////////////////////////////////////////////////////
// Namespace: JetByteTools::Win32
///////////////////////////////////////////////////////////////////////////////

namespace JetByteTools {
namespace Win32 {

CCriticalSection s_criticalSection;

static _tfstream s_debugOut;

static std::string s_logFileName = "\\JetByteTools.log";

void SetLogFileName(const _tstring &name)
{
   USES_CONVERSION;

   if (s_debugOut.is_open())
   {
      s_debugOut.close();
   }

   s_logFileName = T2A(const_cast<PTSTR>(name.c_str()));
}

void Output(const _tstring &message)
{
#ifdef _DEBUG
   CCriticalSection::Owner lock(s_criticalSection);

#ifdef _UNICODE
   std::wcout << ToString(GetCurrentThreadId()) << _T(": ") << message << endl;
#else
   std::cout << ToString(GetCurrentThreadId()) << _T(": ") << message << endl;
#endif

   const _tstring msg = ToString(GetCurrentThreadId()) + _T(": ") + message + _T("\n");

   OutputDebugString(msg.c_str());

   if (!s_debugOut.is_open())
   {
      s_debugOut.open(s_logFileName.c_str(), std::ios_base::out | std::ios_base::app);

      s_debugOut << _T("****************New Log*****************") << endl;
   }

   s_debugOut <<  ToString(GetCurrentThreadId()) << _T(": ") << message << endl;
#else
   //lint -e{715} symbol 'message' not referenced
#endif //_DEBUG
}

_tstring GetLastErrorMessage(DWORD last_error)
{
   static TCHAR errmsg[512];

   if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 
      0,
      last_error,
      0,
      errmsg, 
      511,
      NULL))
   {
      /* if we fail, call ourself to find out why and return that error */
      return (GetLastErrorMessage(GetLastError()));  
   }
  
   return errmsg;
}


_tstring HexToString(
   const BYTE *pBuffer, 
   size_t iBytes)
{
   _tstring result;
     
   for (size_t i = 0; i < iBytes; i++)
   {
      BYTE c ;

      BYTE b = pBuffer[i] >> 4;
         
      if (9 >= b)
      {
         c = b + '0';
      }
      else
      {
         c = (b - 10) + 'A';
      }

      result += (TCHAR)c;

      b = pBuffer[i] & 0x0f;

      if (9 >= b)
      {
         c = b + '0';
      }
      else
      {
         c = (b - 10) + 'A';
      }

      result += (TCHAR)c;
   }

   return result;
}

void StringToHex(
   const _tstring &ts, 
   BYTE *pBuffer, 
   size_t nBytes)
{
   USES_CONVERSION;

   const std::string s = T2A(const_cast<PTSTR>(ts.c_str()));

   for (size_t i = 0; i < nBytes; i++)
	{
      const size_t stringOffset = i * 2;

   	BYTE val = 0;

      const BYTE b = s[stringOffset];

      if (isdigit(b)) 
      {
         val = (BYTE)((b - '0') * 16); 
      }
      else 
      {
         val = (BYTE)(((toupper(b) - 'A') + 10) * 16); 
      }

      const BYTE b1 = s[stringOffset + 1];

      if (isdigit(b1)) 
      {
			val += b1 - '0' ; 
      }
      else 
      {
         val += (BYTE)((toupper(b1) - 'A') + 10); 
      }

      pBuffer[i] = val;
	}
}

_tstring GetCurrentDirectory()
{
   DWORD size = ::GetCurrentDirectory(0, 0);

   auto_ptr<TCHAR> spBuf(new TCHAR[size]);

   if (0 == ::GetCurrentDirectory(size, spBuf.get()))
   {
      throw CException(_T("GetCurrentDirectory()"), _T("Failed to get current directory"));
   }

   return _tstring(spBuf.get());
}

_tstring GetDateStamp()
{
   SYSTEMTIME systime;
   GetSystemTime(&systime);

   static TCHAR buffer[7];

   _stprintf(buffer, _T("%02d%02d%02d"),
                     systime.wDay,
                     systime.wMonth,
                     ( 1900 + systime.wYear) % 100);

   return buffer;
}

_tstring ToHex(BYTE c)
{
   TCHAR hex[3];
	
   const int val = c;

	_stprintf(hex, _T("%02X"), val);

   return hex;
}

_tstring DumpData(
   const BYTE * const pData, 
   size_t dataLength, 
   size_t lineLength /* = 0 */)
{
   const size_t bytesPerLine = lineLength != 0 ? (lineLength - 1) / 3 : 0;

   _tstring result;

   _tstring hexDisplay;
   _tstring display;

   size_t i = 0;

	while (i < dataLength)
	{
      const BYTE c = pData[i++];

      hexDisplay += ToHex(c) + _T(" ");

      if (isprint(c))
      {
         display += (TCHAR)c;
      }
      else
		{
			display += _T('.');
		}

      if ((bytesPerLine && (i % bytesPerLine == 0 && i != 0)) || i == dataLength)
      {
         result += hexDisplay + _T(" - ") + display + _T("\n");

         hexDisplay = _T("");
         display = _T("");
      }
	}

   return result;
}

_tstring GetComputerName()
{
   static bool gotName = false;

   static _tstring name = _T("UNAVAILABLE");

   if (!gotName)
   {
      TCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1] ;
	   DWORD computerNameLen = MAX_COMPUTERNAME_LENGTH ;

      if (::GetComputerName(computerName, &computerNameLen))
      {
         name = computerName;
      }

      gotName = true;
   }

   return name;
}

_tstring GetModuleFileName(
   HINSTANCE hModule /* = 0 */)
{
   static bool gotName = false;

   static _tstring name = _T("UNAVAILABLE");

   if (!gotName)
   {
      TCHAR moduleFileName[MAX_PATH + 1] ;
	   DWORD moduleFileNameLen = MAX_PATH ;

      if (::GetModuleFileName(hModule, moduleFileName, moduleFileNameLen))
      {
         name = moduleFileName;
      }

      gotName = true;
   }

   return name;
}

_tstring GetUserName()
{
   static bool gotName = false;

   static _tstring name = _T("UNAVAILABLE");

   if (!gotName)
   {
      TCHAR userName[UNLEN + 1] ;
	   DWORD userNameLen = UNLEN;

      if (::GetUserName(userName, &userNameLen))
      {
         name = userName;
      }

      gotName = true;
   }

   return name;
}

_tstring StripLeading(
   const _tstring &source, 
   const char toStrip)
{
   const TCHAR *pSrc = source.c_str();

   while (pSrc && *pSrc == toStrip)
   {
      ++pSrc;
   }

   return pSrc;
}

_tstring StripTrailing(
   const _tstring &source, 
   const char toStrip)
{
   size_t i = source.length();
   const _TCHAR *pSrc = source.c_str() + i;
   
   --pSrc;

   while (i && *pSrc == toStrip)
   {
      --pSrc;
      --i;
   }
   
   return source.substr(0, i);
}

#pragma comment(lib, "Version.lib")

_tstring GetFileVersion()
{
   _tstring version;

   const _tstring moduleFileName = GetModuleFileName(NULL);

   LPTSTR pModuleFileName = const_cast<LPTSTR>(moduleFileName.c_str());

   DWORD zero = 0;

   DWORD verSize = ::GetFileVersionInfoSize(pModuleFileName, &zero);

   if (verSize != 0)
   {
      auto_ptr<BYTE> spBuffer(new BYTE[verSize]);

      if (::GetFileVersionInfo(pModuleFileName, 0, verSize, spBuffer.get()))
      {
         LPTSTR pVersion = 0;
         UINT verLen = 0;

         if (::VerQueryValue(spBuffer.get(), 
              const_cast<LPTSTR>(_T("\\StringFileInfo\\080904b0\\ProductVersion")), 
              (void**)&pVersion, 
              &verLen))
         {
            version = pVersion;
         }
      }
   }

   return version;
}

///////////////////////////////////////////////////////////////////////////////
// Namespace: JetByteTools::Win32
///////////////////////////////////////////////////////////////////////////////

} // End of namespace Win32
} // End of namespace JetByteTools 

///////////////////////////////////////////////////////////////////////////////
// Lint options
//
//lint -restore
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// End of file...
///////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人妖av一区二区| 6080午夜不卡| 国产精品欧美一区二区三区| 国产在线看一区| 国产精品毛片a∨一区二区三区| 国产乱码字幕精品高清av| 国产亚洲女人久久久久毛片| 国产激情视频一区二区三区欧美| 国产精品嫩草影院com| 99精品欧美一区二区三区综合在线| 亚洲品质自拍视频网站| 日本丶国产丶欧美色综合| 亚洲成av人**亚洲成av**| 欧美精品在线视频| 国产一区二区三区久久悠悠色av| 日本一区二区三区视频视频| 99久久婷婷国产综合精品| 亚洲午夜在线视频| 日韩你懂的在线播放| 国产99精品在线观看| 最新国产精品久久精品| 69av一区二区三区| 成人午夜在线免费| 亚洲高清免费观看高清完整版在线观看 | 97精品久久久午夜一区二区三区 | 亚洲一区二区三区中文字幕在线 | 久久99精品国产麻豆婷婷洗澡| 欧美xxxx老人做受| 9久草视频在线视频精品| 亚洲精品视频在线看| 日韩一区二区免费在线观看| 国产成人精品aa毛片| 亚洲资源中文字幕| 久久精品亚洲精品国产欧美kt∨ | 亚洲精品成人天堂一二三| 欧美精品xxxxbbbb| 成人晚上爱看视频| 日韩精品电影在线| 综合分类小说区另类春色亚洲小说欧美| 欧美日精品一区视频| 国产福利一区二区三区在线视频| 亚洲午夜精品一区二区三区他趣| 久久久精品蜜桃| 欧美人妖巨大在线| 93久久精品日日躁夜夜躁欧美| 精品一区二区在线观看| 一区二区三区四区亚洲| 国产亚洲欧美一级| 日韩免费一区二区| 欧美高清视频不卡网| www.欧美日韩国产在线| 韩国精品免费视频| 五月婷婷激情综合网| 亚洲欧美视频在线观看| 久久久久久久久久久久久夜| 欧美麻豆精品久久久久久| 91社区在线播放| 成人av在线电影| 国产乱子轮精品视频| 人禽交欧美网站| 午夜视频在线观看一区| 亚洲乱码中文字幕| 中文字幕亚洲一区二区va在线| 精品99一区二区| 日韩一级高清毛片| 日韩三级在线免费观看| 欧美另类变人与禽xxxxx| 91电影在线观看| 一本久久a久久免费精品不卡| 国产成人免费av在线| 国产综合久久久久久鬼色| 久久国产精品露脸对白| 日韩国产欧美三级| 偷偷要91色婷婷| 日韩综合在线视频| 视频一区国产视频| 丝袜脚交一区二区| 日韩二区在线观看| 婷婷一区二区三区| 美女视频一区在线观看| 看片网站欧美日韩| 国产精选一区二区三区| 国产精品一区二区视频| 国产黄人亚洲片| www.亚洲免费av| 91免费版pro下载短视频| 91蜜桃免费观看视频| 在线视频欧美精品| 欧美日韩国产综合久久| 日韩欧美一区在线| 精品国产髙清在线看国产毛片 | 国产亚洲欧美在线| 中文字幕一区视频| 亚洲制服欧美中文字幕中文字幕| 亚洲国产综合在线| 日本不卡视频在线| 国产精品亚洲综合一区在线观看| 成人av免费在线| 在线观看日韩毛片| 日韩欧美高清一区| 欧美国产一区视频在线观看| 亚洲欧美日韩系列| 日韩一区精品视频| 国产乱人伦精品一区二区在线观看| 成人av网站在线观看免费| 91国偷自产一区二区使用方法| 欧美精品九九99久久| 久久久久久一二三区| 亚洲三级在线免费| 日精品一区二区| 成人高清伦理免费影院在线观看| 日本精品一区二区三区高清| 在线不卡欧美精品一区二区三区| 久久综合色综合88| 伊人一区二区三区| 国精产品一区一区三区mba视频| caoporn国产一区二区| 欧美日韩国产大片| 中文成人综合网| 日韩精品成人一区二区三区| 国产精品99久久久久久有的能看 | 在线播放日韩导航| 国产视频一区不卡| 亚洲国产色一区| 成人爱爱电影网址| 日韩亚洲欧美成人一区| 日韩毛片在线免费观看| 久久精品国产99| 欧美亚洲综合另类| 中国色在线观看另类| 日本午夜一本久久久综合| 91在线视频播放地址| 久久青草国产手机看片福利盒子 | 亚洲美女视频在线观看| 精品中文字幕一区二区小辣椒| 97精品视频在线观看自产线路二| 欧美tickling挠脚心丨vk| 午夜欧美2019年伦理| 91麻豆6部合集magnet| 国产亚洲污的网站| 韩国理伦片一区二区三区在线播放| 欧美在线不卡一区| 中文字幕五月欧美| 国产成人免费视频精品含羞草妖精 | 欧美在线免费播放| 国产精品久久久久久久久图文区 | 香蕉成人啪国产精品视频综合网 | 在线观看av一区| 欧美激情一区二区三区不卡| 久久综合综合久久综合| 91精品在线免费观看| 亚洲一区二区在线播放相泽| 99精品国产99久久久久久白柏 | 99免费精品视频| 久久九九全国免费| 久久国产精品72免费观看| 欧美精品tushy高清| 亚洲国产视频a| 欧美日韩激情一区| 亚洲777理论| 欧美日韩久久一区| 亚洲电影第三页| 欧美午夜精品一区| 亚洲线精品一区二区三区八戒| 色国产精品一区在线观看| 亚洲视频每日更新| 色嗨嗨av一区二区三区| 亚洲精品一二三| 日本韩国欧美在线| 亚洲午夜久久久久久久久电影院| 色8久久精品久久久久久蜜| 亚洲精品国产精华液| 色婷婷一区二区| 亚洲综合激情另类小说区| 在线视频你懂得一区二区三区| 亚洲国产一区二区视频| 制服丝袜中文字幕亚洲| 日本91福利区| 久久久久久久久久久久久久久99| 韩国毛片一区二区三区| 国产清纯白嫩初高生在线观看91| 成人免费观看视频| 亚洲欧美日韩国产手机在线| 欧美亚洲一区二区在线| 日韩高清不卡一区二区三区| 日韩免费看的电影| 国产成人精品网址| 亚洲日韩欧美一区二区在线| 欧美视频精品在线| 另类专区欧美蜜桃臀第一页| 久久亚洲一区二区三区四区| 丁香桃色午夜亚洲一区二区三区| 日韩毛片精品高清免费| 欧美喷潮久久久xxxxx| 国产伦精品一区二区三区视频青涩 | 欧美激情综合在线| 在线看一区二区| 精品综合久久久久久8888| 亚洲欧美综合网| 3d动漫精品啪啪1区2区免费|