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

📄 从网上的c#串口通信源码例子转换成的c++串口通信代码——commport.hpp

📁 从网上的C#串口通信源码例子转换成的C++串口通信代码——CommPort.h
💻 HPP
📖 第 1 页 / 共 2 页
字号:

#ifndef MY_INCLUDE__COMMPORT_H
#define MY_INCLUDE__COMMPORT_H

#include "winbase.h"


#define uint unsigned int
#define byte char
#define ushort unsigned short
#define my_internal
#define my_ref
#define my_const

#include <string>

using namespace std;

///<summary>
/// API串口类 叶帆修改 http://blog.csdn.net/yefanqiu
///</summary>
class CommPort
{
    ///<summary>
    ///端口名称(COM1,COM2...COM4...)
    ///</summary>
	public: string Port;
    ///<summary>
    ///波特率9600
    ///</summary>
    public: int BaudRate;
    ///<summary>
    ///数据位4-8
    ///</summary>
    public: byte ByteSize; //4-8
    ///<summary>
    ///奇偶校验0-4=no,odd,even,mark,space
    ///</summary>
    public: byte Parity;   //0-4=no,odd,even,mark,space
    ///<summary>
    ///停止位
    ///</summary>
    public: byte StopBits;   //0,1,2 = 1, 1.5, 2
    ///<summary>
    ///超时长
    ///</summary>
    public: int ReadTimeout;
    ///<summary>
    ///串口是否已经打开
    ///</summary>
    public: bool Opened;
    ///<summary>
    /// COM口句柄
    ///</summary>
    private: HANDLE hComm;

	public: CommPort()
	{
		Port = "COM1:";
		BaudRate = 9600;
		ByteSize = 8; //4-8
		Parity = 0;   //0-4=no,odd,even,mark,space
		StopBits = 0;   //0,1,2 = 1, 1.5, 2
		ReadTimeout = 200;
		Opened = false;
		hComm = (HANDLE)-1;


		M_DLLPATH = "C:\\windows\\system32\\kernel32.dll"; // "kernel32";
		M_GENERIC_READ = 0x80000000;
		M_GENERIC_WRITE = 0x40000000;
		M_OPEN_EXISTING = 3;
		M_INVALID_HANDLE_VALUE = -1;
		M_PURGE_RXABORT = 0x2;
		M_PURGE_RXCLEAR = 0x8;
		M_PURGE_TXABORT = 0x1;
		M_PURGE_TXCLEAR = 0x4;
	};

//#region "API相关定义"
    private: my_const string M_DLLPATH; // "kernel32";

    ///<summary>
    /// WINAPI常量,写标志
    ///</summary>
    private: my_const uint M_GENERIC_READ;
    ///<summary>
    /// WINAPI常量,读标志
    ///</summary>
    private: my_const uint M_GENERIC_WRITE;
    ///<summary>
    /// WINAPI常量,打开已存在
    ///</summary>
    private: my_const int M_OPEN_EXISTING;
    ///<summary>
    /// WINAPI常量,无效句柄
    ///</summary>
    private: my_const int M_INVALID_HANDLE_VALUE;

    private: my_const int M_PURGE_RXABORT;
    private: my_const int M_PURGE_RXCLEAR;
    private: my_const int M_PURGE_TXABORT;
    private: my_const int M_PURGE_TXCLEAR;

    ///<summary>
    ///设备控制块结构体类型
    ///</summary>
    //[StructLayout(LayoutKind.Sequential)]
	/**************************************
        public: struct DCB
    {
        ///<summary>
        /// DCB长度
        ///</summary>
        public: int DCBlength;
        ///<summary>
        ///指定当前波特率
        ///</summary>
        public: int BaudRate;
        ///<summary>
        ///标志位
        ///</summary>
        public: uint flags;
        ///<summary>
        ///未使用,必须为0
        ///</summary>
        public: ushort wReserved;
        ///<summary>
        ///指定在XON字符发送这前接收缓冲区中可允许的最小字节数
        ///</summary>
        public: ushort XonLim;
        ///<summary>
        ///指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数
        ///</summary>
        public: ushort XoffLim;
        ///<summary>
        ///指定端口当前使用的数据位
        ///</summary>
        public: byte ByteSize;
        ///<summary>
        ///指定端口当前使用的奇偶校验方法,可能为:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY 0-4=no,odd,even,mark,space
        ///</summary>
        public: byte Parity;
        ///<summary>
        ///指定端口当前使用的停止位数,可能为:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS 0,1,2 = 1, 1.5, 2
        ///</summary>
        public: byte StopBits;
        ///<summary>
        ///指定用于发送和接收字符XON的值 Tx and Rx XON character
        ///</summary>
        public: byte XonChar;
        ///<summary>
        ///指定用于发送和接收字符XOFF值 Tx and Rx XOFF character
        ///</summary>
        public: byte XoffChar;
        ///<summary>
        ///本字符用来代替接收到的奇偶校验发生错误时的值
        ///</summary>
        public: byte ErrorChar;
        ///<summary>
        ///当没有使用二进制模式时,本字符可用来指示数据的结束
        ///</summary>
        public: byte EofChar;
        ///<summary>
        ///当接收到此字符时,会产生一个事件
        ///</summary>
        public: byte EvtChar;
        ///<summary>
        ///未使用
        ///</summary>
        public: ushort wReserved1;
    };
	**************************************/

    ///<summary>
    ///串口超时时间结构体类型
    ///</summary>
    //[StructLayout(LayoutKind.Sequential)]
	/**********************************************
        private: struct COMMTIMEOUTS
    {
        public: int ReadIntervalTimeout;
        public: int ReadTotalTimeoutMultiplier;
        public: int ReadTotalTimeoutConstant;
        public: int WriteTotalTimeoutMultiplier;
        public: int WriteTotalTimeoutConstant;
    };
	**********************************************/

    ///<summary>
    ///溢出缓冲区结构体类型
    ///</summary>
    //[StructLayout(LayoutKind.Sequential)]
	/**********************************************
        private: struct OVERLAPPED
    {
        public: int Internal;
        public: int InternalHigh;
        public: int Offset;
        public: int OffsetHigh;
        public: int hEvent;
    };
	**********************************************/

    ///<summary>
    ///打开串口
    ///</summary>
    ///<param name="lpFileName">要打开的串口名称</param>
    ///<param name="dwDesiredAccess">指定串口的访问方式,一般设置为可读可写方式</param>
    ///<param name="dwShareMode">指定串口的共享模式,串口不能共享,所以设置为0</param>
    ///<param name="lpSecurityAttributes">设置串口的安全属性,WIN9X下不支持,应设为NULL</param>
    ///<param name="dwCreationDisposition">对于串口通信,创建方式只能为OPEN_EXISTING</param>
    ///<param name="dwFlagsAndAttributes">指定串口属性与标志,设置为FILE_FLAG_OVERLAPPED(重叠I/O操作),指定串口以异步方式通信</param>
    ///<param name="hTemplateFile">对于串口通信必须设置为NULL</param>
    //[DllImport(DLLPATH)]
        //**********private: static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode,
        //**********int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);

    ///<summary>
    ///得到串口状态
    ///</summary>
    ///<param name="hFile">通信设备句柄</param>
    ///<param name="lpDCB">设备控制块DCB</param>
    //[DllImport(DLLPATH)]
        //**********private: static extern bool GetCommState(int hFile, my_ref DCB lpDCB);

    ///<summary>
    ///建立串口设备控制块(嵌入版没有)
    ///</summary>
    ///<param name="lpDef">设备控制字符串</param>
    ///<param name="lpDCB">设备控制块</param>
    //[DllImport(DLLPATH)]
    //private: static extern bool BuildCommDCB(string lpDef, my_ref DCB lpDCB);

⌨️ 快捷键说明

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