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

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

?? com.cpp

?? 上傳一個串口類,能夠直接應用
?? CPP
字號:
//---------------------------------------------------------------------------
//串口控制類
//基本用WINAPI實現,采用事件響應方式,用一個線程處理各種消息
//用一個線程進行監控串口以接收字符,直接向串口寫字符
//作者:馮華亮
//最后修改日期:2002年5月
#include <vcl.h>
#pragma hdrstop

#include "stdio.h"

#include "Com.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
int g_iSerialPort;                         //端口號:COM1,COM2,COM3,COM4
//---------------------------------------------------------------------------
//構造函數,初始化,把各數據成員置0
TSerialPort::TSerialPort()
{
	hComm =INVALID_HANDLE_VALUE; 	//串口句柄
	ComThread=NULL;		       	//串口監控線程
        //異步寫操作中用到的重疊結構中的事件
	ov_Write.hEvent=CreateEvent(NULL, true, false, NULL);
}
//----------------------------------------------------------------------
//析構函數
TSerialPort::~TSerialPort()
{
        if(ComThread!=NULL)
        {
		//如果線程掛起則啟動它,只要這樣Terminate()方法才會有效,
                //線程才會FreeOnTerminated
        	while(ComThread->Suspended)
                	ComThread->Resume();
                ComThread->Terminate();
        	ComThread=NULL;
        }
	//釋放對象,如果句柄有效,則關閉
	if(ov_Write.hEvent!=NULL)
	{
		CloseHandle(ov_Write.hEvent);
		ov_Write.hEvent=NULL;
	}
}
//----------------------------------------------------------------------
//串口初始化,可用于串口1到4,參數意義如下:
//pPortOwner-父窗口,uPortNo-串口號,uBaud-波特率,cParity-奇偶校驗,uDatabits-數據位數,
//uStopbits-停止位數,dwCommEvents-需要監控的串口事件
bool TSerialPort::InitPort(HWND Parent ,unsigned uPortNo,unsigned uBaud,
	char cParity,unsigned uDataBits,unsigned uStopBits,DWORD dwCommEvents)
{
	char sTemp[100];
	if(uPortNo<1||uPortNo>4)
	{
		sprintf(sTemp,"無法打開串口COM%d,串口號只能是COM1、COM2、COM3或COM4中的一個.",
			uPortNo);
		Application->MessageBox(sTemp,"錯誤",MB_ICONSTOP);
		return false;
	}

	if(Parent==NULL)
	{
		Application->MessageBox("串口的父窗口無效,串口監控線程無法正常工作.","錯誤",MB_ICONSTOP);
		return false;
	}

	sprintf(sTemp,"COM%d",uPortNo);	//合成串口號字符串
	//打開串口,獲取串口句柄
	hComm = CreateFile(sTemp,		//串口號
			GENERIC_READ|GENERIC_WRITE,//讀寫方式
			0,		      	//通訊設備必須以獨占方式打開
			NULL, 		      	//無安全屬性
			OPEN_EXISTING,	      	//通訊設備已存在
			FILE_FLAG_OVERLAPPED, 	//異步I/O
			0); 		      	//通訊設備不能用模板打開

	if (hComm==INVALID_HANDLE_VALUE)    //句柄無效,打開串口失敗
        {
		sprintf(sTemp,"無法打開串口%d(COM%d),請檢查串口是否正確安裝,或是否被已經被占用.",
			uPortNo,uPortNo);
		Application->MessageBox(sTemp,"錯誤",MB_ICONSTOP);
		return false;
        }

	//設置超時參數,總時間=Multiplier*字符數+Constant
	//Interval為讀入的字符串中任意兩個字符間的最大間隔
	CommTimeouts.ReadIntervalTimeout=1000;
	CommTimeouts.ReadTotalTimeoutMultiplier=1000;
	CommTimeouts.ReadTotalTimeoutConstant=1000;
	CommTimeouts.WriteTotalTimeoutMultiplier=1000;
	CommTimeouts.WriteTotalTimeoutConstant=1000;

	sprintf(sTemp,"baud=%d parity=%c data=%d stop=%d",uBaud,
		cParity,uDataBits,uStopBits);	//合成串口參數字符串
	//配置串口
	if (SetCommTimeouts(hComm,&CommTimeouts))		//超時參數
	{
		if (SetCommMask(hComm,dwCommEvents))		//需要監控的事件
		{
			if (GetCommState(hComm,&ComDCB))	//獲取原始DCB
			{
				//禁止硬流控,因為本系統不需要
                                ComDCB.fOutxCtsFlow=false;
                                ComDCB.fOutxDsrFlow=false;
                                ComDCB.fDsrSensitivity=false;
                                ComDCB.fDtrControl=DTR_CONTROL_DISABLE;
				ComDCB.fRtsControl=RTS_CONTROL_DISABLE;

				//設置串口設備控制塊(DCB)
				if (BuildCommDCB(sTemp,&ComDCB))
				{
					if (!SetCommState(hComm,&ComDCB))
						ProcessErrorMessage("設置串口");
				}
				else
					ProcessErrorMessage("建立串口設備控制塊");
			}
			else
			    ProcessErrorMessage("獲取串口狀態");
		}
		else
			ProcessErrorMessage("設置串口事件掩碼");
	}
	else
		ProcessErrorMessage("串口超時參數設置");

	//清空串口緩沖區,退出所有相關操作
	PurgeComm(hComm,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT);

	//創建串口監控線程
	ComThread=new TComThread(true,hComm,Parent);
	if(ComThread==NULL)	//無法創建線程
	{
		ProcessErrorMessage("創建線程");
		return false;
	}
	return true;
}
//----------------------------------------------------------------------
//啟動串口監控線程
void __fastcall TSerialPort::StartMonitoring()
{
	ComThread->Resume();
}
//----------------------------------------------------------------------
//掛起線程
void __fastcall TSerialPort::StopMonitoring()
{
	ComThread->Suspend();
}
//----------------------------------------------------------------------
//向串口寫一個字符
bool TSerialPort::WriteToPort(unsigned char ucTxChar)
{
	if(hComm==INVALID_HANDLE_VALUE)
	{
		Application->MessageBox("串口句柄無效,無法發送數據.","錯誤",MB_ICONSTOP);
		return false;
	}

	//初始化重疊結構
	ov_Write.Offset=0;
	ov_Write.OffsetHigh=0;

	//清空串口
	PurgeComm(hComm,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT);
	//寫串口
	DWORD BytesSent=0;
	bool bResult = WriteFile(hComm,	//串口句柄
			&ucTxChar,	//輸出緩沖區
			1,  		//每次只發送一個字符
			&BytesSent,    	//實際讀入的字符數
			&ov_Write);	//重疊結構
	if(!bResult) 	//寫串口失敗
	{
		DWORD dwError=GetLastError();	//得到失敗原因
		switch(dwError)
		{
			case ERROR_IO_PENDING:  //串口操作正在后臺進行
			{
				BytesSent=0;
                                //等待重疊結果
                                bResult=GetOverlappedResult(hComm,
                                                &ov_Write,
                                                &BytesSent, 	//實際發送字符數
                                                true);
                                if (!bResult)	//重疊操作失敗
                                        return false;
				break;
			}
			default:	//失敗
				return false;
		}
	}
	//檢查實際發送的字符數是否與要求相符
	if (BytesSent!=1)
		return false;
        return true;
}
//---------------------------------------------------------------------------
//錯誤處理,顯示原因
void __fastcall ProcessErrorMessage(char* ErrorText)
{
	char ErrorMsg[400];
	LPVOID lpMsgBuf;
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
			NULL,GetLastError(),     //獲取錯誤信息標識
			MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系統缺省語言
			(LPTSTR)&lpMsgBuf, //消息緩沖區
			0,
			NULL);
	sprintf(ErrorMsg, "\"%s\" 由于以下錯誤而失敗: \n\n%s",ErrorText,lpMsgBuf);
	Application->MessageBox(ErrorMsg, "串口錯誤", MB_ICONSTOP);
	LocalFree(lpMsgBuf);
}
//----------------------------------------------------------------------
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区五区中文| 日韩视频一区二区三区在线播放 | 国产福利精品导航| 丝袜亚洲另类丝袜在线| 亚洲婷婷综合色高清在线| 国产精品无人区| 欧美经典一区二区三区| 精品国产伦理网| 2014亚洲片线观看视频免费| 日韩午夜激情电影| 精品欧美乱码久久久久久1区2区| 欧美丝袜自拍制服另类| 在线免费一区三区| 91精品久久久久久蜜臀| 精品电影一区二区三区| 国产农村妇女精品| 亚洲蜜臀av乱码久久精品| 亚洲电影视频在线| 秋霞电影网一区二区| 国内精品视频一区二区三区八戒| 成人一区在线观看| 欧美在线不卡视频| 精品欧美一区二区在线观看| 国产欧美精品国产国产专区| 国产精品人成在线观看免费| 亚洲一区日韩精品中文字幕| 免费观看成人av| www.在线欧美| 欧美一区二区三区精品| 国产日韩精品一区二区三区| 亚洲另类春色校园小说| 日本不卡1234视频| 99久久伊人久久99| 91精品国产福利| 亚洲人成伊人成综合网小说| 蜜乳av一区二区三区| 成人黄色一级视频| 欧美一区二区三区在线| 亚洲天天做日日做天天谢日日欢| 日本美女一区二区三区| 99久久精品情趣| 26uuu久久综合| 亚洲h动漫在线| eeuss国产一区二区三区| 欧美一级二级在线观看| 亚洲美女免费视频| 国产成人在线视频网站| 日韩欧美卡一卡二| 亚洲国产乱码最新视频| 九一九一国产精品| 欧美最新大片在线看 | 日本中文字幕一区二区视频| 大桥未久av一区二区三区中文| 欧美人与z0zoxxxx视频| 亚洲美女视频一区| 成人网在线免费视频| 久久综合色天天久久综合图片| 亚洲一区二区三区四区中文字幕| 成人午夜免费视频| 久久综合狠狠综合久久激情| 奇米一区二区三区| 欧美久久久久久蜜桃| 亚洲激情自拍偷拍| 99综合电影在线视频| 欧美国产精品专区| 国产不卡免费视频| 久久久精品国产免费观看同学| 免费在线观看日韩欧美| 欧美一区欧美二区| 美女一区二区在线观看| 日韩一级视频免费观看在线| 视频一区视频二区中文| 欧美一级一区二区| 日韩高清在线一区| 欧美一区三区二区| 精品在线观看免费| 久久久99精品久久| hitomi一区二区三区精品| 中文字幕日韩一区| 在线观看日韩国产| 午夜欧美电影在线观看| 欧美老人xxxx18| 精品一区二区日韩| 久久久久国产一区二区三区四区| 国产精品原创巨作av| 国产人久久人人人人爽| 99v久久综合狠狠综合久久| 亚洲欧美激情小说另类| 欧美无乱码久久久免费午夜一区 | 一区二区在线观看视频| 欧美午夜一区二区三区| 奇米四色…亚洲| 日本一区二区免费在线观看视频 | 免费久久99精品国产| 制服丝袜一区二区三区| 激情欧美一区二区三区在线观看| 亚洲精品一区二区三区香蕉| av动漫一区二区| 亚洲成人www| 久久欧美一区二区| 欧美在线观看禁18| 国产精品一区在线观看乱码 | 免费精品99久久国产综合精品| 91精品国产综合久久福利软件| 国产综合色产在线精品| 亚洲美女免费视频| 久久综合九色综合欧美亚洲| 99久久国产综合精品色伊| 视频一区视频二区中文| 日本一区二区三区电影| 91精品国产黑色紧身裤美女| 国产麻豆精品theporn| 亚洲综合清纯丝袜自拍| 久久久久久久网| 91美女视频网站| 国产一区二区网址| 一区二区三区四区在线| 精品免费日韩av| 欧美曰成人黄网| 日韩高清不卡在线| 中文字幕色av一区二区三区| 91精品国产综合久久久久久漫画| 国产一区二区三区蝌蚪| 五月天久久比比资源色| 成人欧美一区二区三区黑人麻豆| 欧美电视剧在线看免费| 日本精品裸体写真集在线观看| 韩国视频一区二区| 日韩精品亚洲一区二区三区免费| 欧美激情中文字幕| 欧美变态tickling挠脚心| 欧美专区日韩专区| 成人一级片在线观看| 极品美女销魂一区二区三区| 一区二区三区四区不卡视频| 国产精品三级久久久久三级| 欧美成人a视频| 在线电影国产精品| 欧美亚洲国产怡红院影院| 99在线精品视频| 成人精品在线视频观看| 韩国理伦片一区二区三区在线播放| 亚洲一区在线观看视频| 亚洲综合视频在线观看| 亚洲人被黑人高潮完整版| 中文字幕国产一区二区| 国产欧美日韩另类一区| 欧美国产综合色视频| 精品国产伦一区二区三区观看方式| 欧美一区二区三区视频在线观看| 欧美色手机在线观看| 欧美亚洲一区二区在线| 欧美综合一区二区| 欧美日韩久久一区| 欧美午夜精品久久久久久孕妇| 色综合天天天天做夜夜夜夜做| 波多野结衣一区二区三区 | 污片在线观看一区二区| 亚洲成年人网站在线观看| 亚洲图片欧美一区| 日韩**一区毛片| 免费人成在线不卡| 国产在线国偷精品产拍免费yy| 久久精品免费看| 国产福利一区在线观看| 成a人片国产精品| 91视视频在线观看入口直接观看www| 99麻豆久久久国产精品免费优播| 成人性生交大片免费看视频在线| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产不卡在线视频| 成人三级伦理片| 色综合天天天天做夜夜夜夜做| 欧洲视频一区二区| 678五月天丁香亚洲综合网| 日韩一区二区三区免费观看| 久久人人超碰精品| 国产精品成人午夜| 天天综合色天天综合色h| 精品一区二区精品| 成人av在线一区二区| 欧美亚洲日本一区| 精品成人在线观看| 综合激情网...| 蜜臀久久99精品久久久画质超高清| 久久疯狂做爰流白浆xx| 不卡在线视频中文字幕| 欧美丰满一区二区免费视频| 久久久欧美精品sm网站| 亚洲欧美日韩国产手机在线| 美女视频免费一区| fc2成人免费人成在线观看播放| 在线观看91精品国产麻豆| 国产精品天干天干在观线| 亚洲午夜成aⅴ人片| 成人永久免费视频| 日韩一级成人av| 一区二区三区不卡视频| 国产制服丝袜一区| 欧美精品精品一区|