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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? serialport.cpp

?? 對(duì)于銀行卡卡的讀取控制
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
Module : SERIALPORT.CPP
Purpose: Implementation for an MFC wrapper class for serial ports
Created: PJN / 31-05-1999
History: PJN / 03-06-1999 1. Fixed problem with code using CancelIo which does not exist on 95.
                          2. Fixed leaks which can occur in sample app when an exception is thrown
         PJN / 16-06-1999 1. Fixed a bug whereby CString::ReleaseBuffer was not being called in 
                             CSerialException::GetErrorMessage
         PJN / 29-09-1999 1. Fixed a simple copy and paste bug in CSerialPort::SetDTR

Copyright (c) 1999 by PJ Naughter.  
All rights reserved.

*/

/////////////////////////////////  Includes  //////////////////////////////////
#include "stdafx.h"
#include "serialport.h"
#include "winerror.h"




///////////////////////////////// defines /////////////////////////////////////

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////////////////// Implementation ///////////////////////////////

//Class which handles CancelIo function which must be constructed at run time
//since it is not imeplemented on NT 3.51 or Windows 95. To avoid the loader
//bringing up a message such as "Failed to load due to missing export...", the
//function is constructed using GetProcAddress. The CSerialPort::CancelIo 
//function then checks to see if the function pointer is NULL and if it is it 
//throws an exception using the error code ERROR_CALL_NOT_IMPLEMENTED which
//is what 95 would have done if it had implemented a stub for it in the first
//place !!

class _SERIAL_PORT_DATA
{
public:
//Constructors /Destructors
  _SERIAL_PORT_DATA();
  ~_SERIAL_PORT_DATA();

  HINSTANCE m_hKernel32;
  typedef BOOL (CANCELIO)(HANDLE);
  typedef CANCELIO* LPCANCELIO;
  LPCANCELIO m_lpfnCancelIo;
};

_SERIAL_PORT_DATA::_SERIAL_PORT_DATA()
{
  m_hKernel32 = LoadLibrary(_T("KERNEL32.DLL"));
  VERIFY(m_hKernel32 != NULL);
  m_lpfnCancelIo = (LPCANCELIO) GetProcAddress(m_hKernel32, "CancelIo");
}

_SERIAL_PORT_DATA::~_SERIAL_PORT_DATA()
{
  FreeLibrary(m_hKernel32);
  m_hKernel32 = NULL;
}


//The local variable which handle the function pointers

_SERIAL_PORT_DATA _SerialPortData;




////////// Exception handling code

void AfxThrowSerialException(DWORD dwError /* = 0 */)
{
	if (dwError == 0)
		dwError = ::GetLastError();

	CSerialException* pException = new CSerialException(dwError);

	TRACE(_T("Warning: throwing CSerialException for error %d\n"), dwError);
	THROW(pException);
}

BOOL CSerialException::GetErrorMessage(LPTSTR pstrError, UINT nMaxError, PUINT pnHelpContext)
{
	ASSERT(pstrError != NULL && AfxIsValidString(pstrError, nMaxError));

	if (pnHelpContext != NULL)
		*pnHelpContext = 0;

	LPTSTR lpBuffer;
	BOOL bRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
			                      NULL,  m_dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
			                      (LPTSTR) &lpBuffer, 0, NULL);

	if (bRet == FALSE)
		*pstrError = '\0';
	else
	{
		lstrcpyn(pstrError, lpBuffer, nMaxError);
		bRet = TRUE;

		LocalFree(lpBuffer);
	}

	return bRet;
}

CString CSerialException::GetErrorMessage()
{
  CString rVal;
  LPTSTR pstrError = rVal.GetBuffer(4096);
  GetErrorMessage(pstrError, 4096, NULL);
  rVal.ReleaseBuffer();
  return rVal;
}

CSerialException::CSerialException(DWORD dwError)
{
	m_dwError = dwError;
}

CSerialException::~CSerialException()
{
}

IMPLEMENT_DYNAMIC(CSerialException, CException)

#ifdef _DEBUG
void CSerialException::Dump(CDumpContext& dc) const
{
	CObject::Dump(dc);

	dc << "m_dwError = " << m_dwError;
}
#endif





////////// The actual serial port code

CSerialPort::CSerialPort()
{
  m_hComm = INVALID_HANDLE_VALUE;
  m_bOverlapped = FALSE;
}

CSerialPort::~CSerialPort()
{
  Close();
}

IMPLEMENT_DYNAMIC(CSerialPort, CObject)

#ifdef _DEBUG
void CSerialPort::Dump(CDumpContext& dc) const
{
	CObject::Dump(dc);

	dc << _T("m_hComm = ") << m_hComm << _T("\n");
  dc << _T("m_bOverlapped = ") << m_bOverlapped;
}
#endif

BOOL CSerialPort::Open(int nPort, DWORD dwBaud, BYTE parity, BYTE DataBits, BYTE stopbits, FlowControl fc, BOOL bOverlapped)
{
  //Validate our parameters
  ASSERT(nPort>0 && nPort<=255);

  //Call CreateFile to open up the comms port
  CString sPort;
  sPort.Format(_T("\\\\.\\COM%d"), nPort);
  m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, bOverlapped ? FILE_FLAG_OVERLAPPED : 0, NULL);
  if (m_hComm == INVALID_HANDLE_VALUE)
  {
    TRACE(_T("Failed to open up the comms port\n"));
    AfxThrowSerialException();
//	  MessageBox("打開(kāi)串口不成功!",NULL,MB_ICONERROR|MB_OK);
	  return FALSE ;
  }
  
  m_bOverlapped = bOverlapped;

  //Get the current state prior to changing it
  DCB dcb;
  GetState(dcb);

  //Setup the baud rate
  dcb.BaudRate = dwBaud; 

  //Setup the Parity
  switch (parity)
  {
    case EVENPARITY:  dcb.Parity = EVENPARITY;  break;
    case MARKPARITY:  dcb.Parity = MARKPARITY;  break;
    case NOPARITY:    dcb.Parity = NOPARITY;    break;
    case ODDPARITY:   dcb.Parity = ODDPARITY;   break;
    case SPACEPARITY: dcb.Parity = SPACEPARITY; break;
    default:          ASSERT(FALSE);            break;
  }

  //Setup the data bits
  dcb.ByteSize = DataBits;

  //Setup the stop bits
  switch (stopbits)
  {
    case ONESTOPBIT:           dcb.StopBits = ONESTOPBIT;   break;
    case ONE5STOPBITS:			dcb.StopBits = ONE5STOPBITS; break;
    case TWOSTOPBITS:          dcb.StopBits = TWOSTOPBITS;  break;
    default:                   ASSERT(FALSE);               break;
  }

  //Setup the flow control 
  dcb.fDsrSensitivity = FALSE;
  switch (fc)
  {
    case NoFlowControl:
    {
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;
      break;
    }
    case CtsRtsFlowControl:
    {
      dcb.fOutxCtsFlow = TRUE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;
      break;
    }
    case CtsDtrFlowControl:
    {
      dcb.fOutxCtsFlow = TRUE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;
      break;
    }
    case DsrRtsFlowControl:
    {
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = TRUE;
      dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;
      break;
    }
    case DsrDtrFlowControl:
    {
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = TRUE;
      dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;
      break;
    }
    case XonXoffFlowControl:
    {
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fOutX = TRUE;
      dcb.fInX = TRUE;
      dcb.XonChar = 0x11;
      dcb.XoffChar = 0x13;
      dcb.XoffLim = 100;
      dcb.XonLim = 100;
      break;
    }
    default:
    {
      ASSERT(FALSE);
      break;
    }
  }
  
  //Now that we have all the settings in place, make the changes
  SetState(dcb);
  return TRUE;
}

void CSerialPort::Close()
{
  if (IsOpen())
  {
    BOOL bSuccess = CloseHandle(m_hComm);
    m_hComm = INVALID_HANDLE_VALUE;
    if (!bSuccess)
      TRACE(_T("Failed to close up the comms port, GetLastError:%d\n"), GetLastError());
    m_bOverlapped = FALSE;
  }
}

void CSerialPort::Attach(HANDLE hComm)
{
  Close();
  m_hComm = hComm;  
}

HANDLE CSerialPort::Detach()
{
  HANDLE hrVal = m_hComm;
  m_hComm = INVALID_HANDLE_VALUE;
  return hrVal;
}

DWORD CSerialPort::Read(void* lpBuf, DWORD dwCount)
{
  ASSERT(IsOpen());
  ASSERT(!m_bOverlapped);

  DWORD dwBytesRead = 0;
  if (!ReadFile(m_hComm, lpBuf, dwCount, &dwBytesRead, NULL))
  {
    TRACE(_T("Failed in call to ReadFile\n"));
    AfxThrowSerialException();
  }

  return dwBytesRead;
}

BOOL CSerialPort::Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped)
{
  ASSERT(IsOpen());
  ASSERT(m_bOverlapped);
  ASSERT(overlapped.hEvent);

  DWORD dwBytesRead = 0;
  BOOL bSuccess = ReadFile(m_hComm, lpBuf, dwCount, &dwBytesRead, &overlapped);
  if (!bSuccess)
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("Failed in call to ReadFile\n"));
      AfxThrowSerialException();
    }
  }
  return bSuccess;
}

DWORD CSerialPort::Write(const void* lpBuf, DWORD dwCount)
{
  ASSERT(IsOpen());
  ASSERT(!m_bOverlapped);

  DWORD dwBytesWritten = 0;
  if (!WriteFile(m_hComm, lpBuf, dwCount, &dwBytesWritten, NULL))
  {
    TRACE(_T("Failed in call to WriteFile\n"));
    AfxThrowSerialException();
  }

  return dwBytesWritten;
}

BOOL CSerialPort::Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped)
{
  ASSERT(IsOpen());
  ASSERT(m_bOverlapped);
  ASSERT(overlapped.hEvent);

  DWORD dwBytesWritten = 0;
  BOOL bSuccess = WriteFile(m_hComm, lpBuf, dwCount, &dwBytesWritten, &overlapped);
  if (!bSuccess)
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("Failed in call to WriteFile\n"));
      AfxThrowSerialException();
    }
  }
  return bSuccess;
}

void CSerialPort::GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait)
{
  ASSERT(IsOpen());
  ASSERT(m_bOverlapped);
  ASSERT(overlapped.hEvent);

  DWORD dwBytesWritten = 0;
  if (!::GetOverlappedResult(m_hComm, &overlapped, &dwBytesTransferred, bWait))
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("Failed in call to GetOverlappedResult\n"));
      AfxThrowSerialException();
    }
  }
}

void CSerialPort::_OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped)
{
  //Validate our parameters
  ASSERT(lpOverlapped);

  //Convert back to the C++ world
  CSerialPort* pSerialPort = (CSerialPort*) lpOverlapped->hEvent;
  ASSERT(pSerialPort->IsKindOf(RUNTIME_CLASS(CSerialPort)));

  //Call the C++ function
  pSerialPort->OnCompletion(dwErrorCode, dwCount, lpOverlapped);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色偷偷88欧美精品久久久| 91视频在线看| 亚洲一区二区三区四区五区中文| 欧美一区二区免费| 色天天综合久久久久综合片| 精品亚洲成a人| 天堂成人国产精品一区| 国产精品夫妻自拍| 精品国产乱码久久久久久图片| 色偷偷一区二区三区| 国产精品一区一区| 奇米色一区二区| 婷婷久久综合九色国产成人| 一区在线观看免费| 国产丝袜欧美中文另类| 日韩精品综合一本久道在线视频| 91免费版pro下载短视频| 国产精品亚洲а∨天堂免在线| 爽好久久久欧美精品| 亚洲精品免费视频| 中文字幕一区二区三区不卡在线| 精品国产1区二区| 欧美一区二区三区在线观看视频| 在线亚洲+欧美+日本专区| av一二三不卡影片| 国产激情视频一区二区在线观看 | 日韩一区二区三区在线观看| 一本一道久久a久久精品| 不卡影院免费观看| 成人影视亚洲图片在线| 大胆亚洲人体视频| 国产不卡视频在线观看| 国产寡妇亲子伦一区二区| 韩国v欧美v日本v亚洲v| 激情亚洲综合在线| 久久国产精品72免费观看| 麻豆精品在线看| 美日韩一区二区| 老鸭窝一区二区久久精品| 久久99精品一区二区三区| 久久国产剧场电影| 国产精品一区二区三区网站| 国产精品一区免费视频| 国产成人免费视| 波多野结衣91| 色av一区二区| 欧美日韩国产综合草草| 欧美人与禽zozo性伦| 欧美一级片在线观看| 精品免费国产一区二区三区四区| 26uuu精品一区二区在线观看| 精品久久久影院| 国产亚洲欧美色| 成人欧美一区二区三区白人| 亚洲愉拍自拍另类高清精品| 亚洲国产一区在线观看| 理论电影国产精品| 国产成人av一区二区| 91视频观看视频| 欧美高清一级片在线| 欧美r级电影在线观看| 国产精品久久看| 亚洲一区二区三区激情| 免费久久精品视频| 国产91富婆露脸刺激对白| 在线视频亚洲一区| 精品国产一区二区在线观看| 久久精品男人天堂av| 亚洲丝袜自拍清纯另类| 日韩高清在线一区| 国产精品一区二区在线观看不卡 | 国产乱子伦视频一区二区三区| 成人美女在线视频| 欧美嫩在线观看| 国产网红主播福利一区二区| 一区二区三区欧美视频| 精品在线播放午夜| 91麻豆国产精品久久| 日韩欧美一区中文| 国产精品国产三级国产aⅴ原创 | 粉嫩久久99精品久久久久久夜| 色综合咪咪久久| 精品国产一区二区三区av性色| 亚洲丝袜精品丝袜在线| 久久精品国产亚洲aⅴ | 久久亚洲春色中文字幕久久久| 国产精品嫩草99a| 日韩精品成人一区二区三区| 成人午夜av电影| 91麻豆精品国产自产在线| 中文字幕欧美一区| 精品一区二区三区欧美| 欧美性xxxxxxxx| 国产精品高潮呻吟| 国内精品视频一区二区三区八戒| 在线视频欧美区| 欧美国产欧美综合| 蜜臀av一区二区| 欧美日韩在线综合| 中文字幕亚洲一区二区av在线 | 欧美二区在线观看| 亚洲色图欧美激情| 国产成人h网站| 日韩三级av在线播放| 亚洲午夜一区二区三区| 成人国产视频在线观看| 久久嫩草精品久久久精品| 婷婷国产在线综合| 色综合久久久网| 欧美国产乱子伦| 国产精品99久| 久久久久国产精品人| 麻豆精品国产传媒mv男同| 欧美亚洲动漫另类| 一区二区三区在线播| av中文字幕一区| 国产精品久久久久久久久久久免费看| 精品一区二区三区在线视频| 精品视频999| 午夜精品久久久久久久99水蜜桃| 在线免费观看视频一区| 亚洲欧美在线视频| 99这里只有精品| 1000部国产精品成人观看| 国产成人免费视频网站| 久久久久亚洲蜜桃| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲bt欧美bt精品| 在线看国产日韩| 亚洲午夜精品网| 欧美日韩在线播放三区| 亚洲国产精品麻豆| 欧美日韩视频第一区| 亚洲福中文字幕伊人影院| 精品婷婷伊人一区三区三| 亚洲123区在线观看| 欧美日韩国产高清一区二区三区| 午夜视频在线观看一区二区三区| 欧美色老头old∨ideo| 亚洲妇熟xx妇色黄| 91精品国产一区二区三区| 美国精品在线观看| 日韩免费观看高清完整版在线观看| 麻豆成人av在线| 久久精品男人的天堂| 成+人+亚洲+综合天堂| 亚洲啪啪综合av一区二区三区| 在线视频欧美精品| 日韩av高清在线观看| 精品国产亚洲在线| 国产成人av电影在线播放| 亚洲品质自拍视频网站| 欧美日韩另类一区| 激情综合色综合久久| 中文av一区二区| 在线亚洲人成电影网站色www| 亚洲超丰满肉感bbw| 欧美大白屁股肥臀xxxxxx| 国产成人精品午夜视频免费| 亚洲情趣在线观看| 91精品国产综合久久久蜜臀粉嫩| 久久精工是国产品牌吗| 国产精品―色哟哟| 欧美无砖砖区免费| 狠狠色丁香久久婷婷综合丁香| 国产精品三级av| 欧美日本在线播放| 粉嫩欧美一区二区三区高清影视 | 日韩欧美aaaaaa| 成人av电影在线播放| 亚洲一级电影视频| 精品国产欧美一区二区| 91一区二区在线| 激情久久久久久久久久久久久久久久| 亚洲国产成人自拍| 欧美浪妇xxxx高跟鞋交| 国产精品1区二区.| 亚洲成精国产精品女| 国产午夜三级一区二区三| 欧美影片第一页| 国产高清一区日本| 天堂一区二区在线免费观看| 国产精品视频yy9299一区| 欧美一区二区性放荡片| 91在线国产观看| 国产最新精品免费| 亚洲第一主播视频| 中文字幕一区二区三区蜜月 | 亚洲成人激情自拍| 国产精品三级电影| 欧美α欧美αv大片| 欧美性受xxxx| www.日韩在线| 久久99国内精品| 亚洲444eee在线观看| 国产精品成人在线观看| 亚洲精品在线观看网站| 在线电影欧美成精品| 99久久综合99久久综合网站| 久久爱www久久做|