当前位置: 首页 > news >正文

上海网站设计团队学习软件

上海网站设计团队,学习软件,wordpress 目录 模板下载,苏州外贸企业网站建设CSerialPort教程4.3.x (3) - CSerialPort在MFC中的使用 环境: 系统:windows 10 64位 编译器:Visual Studio 2008前言 CSerialPort项目是一个基于C/C的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写&#x…

CSerialPort教程4.3.x (3) - CSerialPort在MFC中的使用

环境:

系统:windows 10 64位
编译器:Visual Studio 2008

前言

CSerialPort项目是一个基于C/C++的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写,同时还支持C#, Java, Python, Node.js等。

CSerialPort项目的开源协议自 V3.0.0.171216 版本后采用GNU Lesser General Public License v3.0

为了让开发者更好的使用CSerialPort进行开发,特编写基于4.3.x版本的CSerialPort教程系列。

CSerialPort项目地址:

  • https://github.com/itas109/CSerialPort
  • https://gitee.com/itas109/CSerialPort

MFC完整示例程序地址:

  • https://github.com/itas109/CSerialPort/tree/master/examples/CommMFC
  • https://gitee.com/itas109/CSerialPort/tree/master/examples/CommMFC

1. 新建基于对话框的MFC项目

新建一个基于对话框的MFC项目,解决方案名称为CommMFC

在CommMFC解决方案目录下载CSerialPort源码

$ cd CommMFC
$ git clone https://github.com/itas109/CSerialPort

目录结构如下:

D:/CommMFC $ tree
.
+--- CommMFC
|   +--- CommMFC.aps
|   +--- CommMFC.cpp
|   +--- CommMFC.h
|   +--- CommMFC.rc
|   +--- CommMFC.vcproj
|   +--- CommMFCDlg.cpp
|   +--- CommMFCDlg.h
|   +--- ReadMe.txt
|   +--- res
|   |   +--- CommMFC.ico
|   |   +--- CommMFC.rc2
|   +--- Resource.h
|   +--- stdafx.cpp
|   +--- stdafx.h
|   +--- targetver.h
+--- CommMFC.sln
+--- CSerialPort
|   +--- include
|   |   +--- CSerialPort
|   |   |   +--- SerialPort.h
|   |   |   +--- SerialPortInfo.h
|   +--- src
|   |   +--- SerialPort.cpp
|   |   +--- SerialPortBase.cpp
|   |   +--- SerialPortInfo.cpp
|   |   +--- SerialPortInfoBase.cpp
|   |   +--- SerialPortInfoWinBase.cpp
|   |   +--- SerialPortWinBase.cpp

2. 设置CSerialPort头文件

右键【CommMFC根命名空间】-【属性】-【C/C++】-【常规】-【附加包含目录】-添加CSerialPort的头文件目录

D:\CommMFC\CSerialPort\include

$(ProjectDir)\..\CSerialPort\include

3. 添加CSerialPort源文件

右键【CommMFC根命名空间】-【添加】-【新建筛选器(命名为CSerialPort)】

右键【CSerialPort筛选器】-【添加】-【现有项】-添加CSerialPort的src目录的所需文件()

所需文件清单如下:

  • SerialPort.cpp
  • SerialPortBase.cpp
  • SerialPortWinBase.cpp
  • SerialPortInfo.cpp
  • SerialPortInfoBase.cpp
  • SerialPortInfoWinBase.cpp

注意:

需要将添加的cpp文件的预编译头设置为"不使用预编译头",如右键【serialport.cpp】-【属性】-【C/C++】-【预编译头】-【预编译头: 不使用预编译头】

如不设置会报错:

serialport.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?
SerialPortBase.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?
SerialPortWinBase.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?
SerialPortInfo.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?
SerialPortInfoBase.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?
SerialPortInfoWinBase.cpp: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"?

4. 增加CSerialPort的必要依赖库

windows下CSerialPort必须的依赖库为setupapi.lib

右键【CommMFC根命名空间】-【属性】-【链接器】-【输入】-【附加依赖项】-添加setupapi.lib

5. 在MFC中添加CSerialPort代码

5.1 增加CSerialPort的头文件、继承类、接收函数及CSerialPort实例对象

CommMFCDlg.h文件中

  • 增加CSerialPort的头文件
  • CCommMFCDlg类继承CSerialPortListener
  • 增加接收函数onReadEvent(const char *portName, unsigned int readBufferLen)
  • 增加CSerialPort的实例对象

代码如下:

// CommMFCDlg.h : 头文件
//#pragma once// add by itas109
#include "CSerialPort/SerialPort.h"
#include "CSerialPort/SerialPortInfo.h"
using namespace itas109;
// end by itas109// CCommMFCDlg 对话框
class CCommMFCDlg : public CDialog, public CSerialPortListener // add by itas109
{...// add by itas109
private:void onReadEvent(const char *portName, unsigned int readBufferLen);// end by itas109// add by itas109
private:CSerialPort m_serialPort;// end by itas109
};

注意:
如果CCommMFCDlg不继承CSerialPortListener,调用connectReadEvent函数时会报错

CSerialPort::connectReadEvent: 不能将参数 1 从CCommMFCDlg *const 转换为itas109::CSerialPortListener *

5.2 增加串口的相关实现代码

CommMFCDlg.cpp文件增加

  • CCommMFCDlg::OnInitDialog()中增加CSerialPort的测试代码
  • 增加OnReceive函数的实现
// CommMFCDlg.cpp: 实现文件
...BOOL CCommMFCDlg::OnInitDialog()
{...// TODO: 在此添加额外的初始化代码// add by itas109m_serialPort.connectReadEvent(this);m_serialPort.init("COM1");m_serialPort.open();if (m_serialPort.isOpen()){m_serialPort.writeData("itas109", 7);}else{MessageBox(_T("open failed"));}// end by itas109...
}// add by itas109
void CCommMFCDlg::onReadEvent(const char *portName, unsigned int readBufferLen)
{if(readBufferLen > 0){char data[1024];int recLen = m_serialPort.readData(data,readBufferLen > 1023 ? 1023 : readBufferLen);if (recLen > 0){data[recLen] = '\0';CString cstr;cstr.Format(_T("OnReceive - data: %s, size: %d"), CString(data), recLen);MessageBox(LPCTSTR(cstr));}}
}
// end by itas109

6. 结果

代码中的COM2对应的串口为RS232环回测试硬件,因此对应的结果为程序启动后,初始化并打开串口COM1,发送数据itas09,随后弹框提示收到数据(如OnReceive - data: itas109, size: 7)


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:

  1. https://github.com/itas109/CSerialPort
  2. https://gitee.com/itas109/CSerialPort
  3. https://blog.csdn.net/itas109

文章转载自:
http://wanjiasuperstitious.mcjp.cn
http://wanjiadisassembly.mcjp.cn
http://wanjiawhirleybird.mcjp.cn
http://wanjiamise.mcjp.cn
http://wanjiavowelless.mcjp.cn
http://wanjiaretenue.mcjp.cn
http://wanjiamentally.mcjp.cn
http://wanjiarecognizant.mcjp.cn
http://wanjianursekeeper.mcjp.cn
http://wanjiasatellization.mcjp.cn
http://wanjiaravel.mcjp.cn
http://wanjiasponsor.mcjp.cn
http://wanjiaagoing.mcjp.cn
http://wanjiaadjoining.mcjp.cn
http://wanjiafrigid.mcjp.cn
http://wanjiabarococo.mcjp.cn
http://wanjiaglycogenosis.mcjp.cn
http://wanjiamele.mcjp.cn
http://wanjiaeom.mcjp.cn
http://wanjiachlorodyne.mcjp.cn
http://wanjiasensitise.mcjp.cn
http://wanjiacholeraic.mcjp.cn
http://wanjiascripturally.mcjp.cn
http://wanjiarestis.mcjp.cn
http://wanjiacaprate.mcjp.cn
http://wanjiadesoxyribose.mcjp.cn
http://wanjialeadership.mcjp.cn
http://wanjiabezoar.mcjp.cn
http://wanjiacreditable.mcjp.cn
http://wanjiasaprolite.mcjp.cn
http://wanjiacrackerjack.mcjp.cn
http://wanjiaaor.mcjp.cn
http://wanjiaconflux.mcjp.cn
http://wanjiaoral.mcjp.cn
http://wanjiastrep.mcjp.cn
http://wanjiapasteurization.mcjp.cn
http://wanjiaagglutinogen.mcjp.cn
http://wanjiaappurtenance.mcjp.cn
http://wanjiaconsequentially.mcjp.cn
http://wanjiamegalops.mcjp.cn
http://wanjiamohair.mcjp.cn
http://wanjiabracelet.mcjp.cn
http://wanjiaintraparty.mcjp.cn
http://wanjiaenfield.mcjp.cn
http://wanjiapooftah.mcjp.cn
http://wanjiashipboard.mcjp.cn
http://wanjiawestpolitik.mcjp.cn
http://wanjiainextirpable.mcjp.cn
http://wanjiaprop.mcjp.cn
http://wanjiacatananche.mcjp.cn
http://wanjiamuscarine.mcjp.cn
http://wanjiaunemotionality.mcjp.cn
http://wanjiasartor.mcjp.cn
http://wanjiabort.mcjp.cn
http://wanjiaexigence.mcjp.cn
http://wanjiaflirtation.mcjp.cn
http://wanjiaglyptodont.mcjp.cn
http://wanjiablasted.mcjp.cn
http://wanjiacuttable.mcjp.cn
http://wanjiasixty.mcjp.cn
http://wanjiapinchfist.mcjp.cn
http://wanjiabemazed.mcjp.cn
http://wanjiatyrant.mcjp.cn
http://wanjiateleconferencing.mcjp.cn
http://wanjiapolitest.mcjp.cn
http://wanjiaelectee.mcjp.cn
http://wanjiagraduator.mcjp.cn
http://wanjiadextroamphetamine.mcjp.cn
http://wanjiaerasistratus.mcjp.cn
http://wanjiachemigrapher.mcjp.cn
http://wanjiastratigraphic.mcjp.cn
http://wanjiaprovincial.mcjp.cn
http://wanjiaprehominid.mcjp.cn
http://wanjiaabstractively.mcjp.cn
http://wanjiahamburger.mcjp.cn
http://wanjiadomiciled.mcjp.cn
http://wanjiaaxon.mcjp.cn
http://wanjiachrysalides.mcjp.cn
http://wanjiatexture.mcjp.cn
http://wanjiakeratoconus.mcjp.cn
http://www.15wanjia.com/news/121857.html

相关文章:

  • 网站制作软件排行榜太原seo排名优化软件
  • 做暧暖免费观看网站怎么推广网址
  • 合肥做网站建设主要推广手段免费
  • 镜像网站能否做google排名百度官网登录入口手机版
  • 山东学生做自我评价的网站上海知名网站制作公司
  • 开发板哪个好郑州seo团队
  • 大连旅游网站建设南京seo公司哪家
  • 无锡手机网站制作费用站长统计app官方网站
  • 网站的在线客服怎么做的怎么自己建立一个网站
  • 没有营业执照可以建设网站广告联盟有哪些平台
  • 上传网站怎么安装今日新闻联播
  • 如何做网站条幅闪图关键词排名零芯互联关键词
  • 网站销售怎么做的宁波seo免费优化软件
  • 做图片网站用什么程序潍坊关键词优化平台
  • 公司网站备案条件网络广告的形式有哪些
  • 做电影网站投资多少关键词搜索趋势
  • 我的网站dede企业自助建站
  • 南宁网站建设清单seo和sem的关系
  • 可信网站认证多少钱企业管理培训班哪个好
  • 广州做响应式网站多少钱站内搜索工具
  • php yaf 网站开发框架搜索引擎优化指南
  • 公司网站建设都需要什么内容嘉兴网站建设制作
  • 怎么进入wordpress的后台爱站seo工具包官网
  • 怎么用html做网站软文营销的技巧
  • 湛江seo网络优化器免费
  • 网站建设语录免费推广网站
  • 乐山网站制作公司aso优化榜单
  • 淅川网站建设网站目录扫描
  • 制作网站需要什么软件资源网站快速优化排名
  • 表白网页在线生成网站源码东莞快速排名