VS2010,VS2005串口控件MSComm加入方法
### VS2010与VS2005中加入MSComm串口控件的方法 在进行串口通信开发时,MSComm(Microsoft Communication Control)是一个非常实用的控件,它可以帮助开发者实现对串口的基本操作,如打开、关闭、设置波特率等。本文将详细介绍如何在Visual Studio 2010和Visual Studio 2005中加入并使用MSComm控件。 #### 准备工作:获取MSComm控件 需要确保系统中已经安装了MSComm控件。如果使用的是VC6.0或其他早期版本的Visual Studio,通常会自带MSComm控件。对于VS2005或VS2010,需要手动安装该控件。可以从VC6.0或VB6中提取`MSCOMM32.OCX`、`MSCOMM32.SRG`、`MSCOMM32.DEF`等文件,并将其放置在系统的`System32`目录下。 #### 注册MSComm控件 安装完控件后,还需要注册控件以便可以在项目中使用。可以通过命令行工具`regsvr32 MSCOMM32.OCX`来注册控件。为了方便,可以创建一个批处理文件,内容为上述命令,双击运行即可完成注册。 #### 处理许可证问题 由于MSComm控件存在版权问题,在注册控件之前,需要修改注册表中的某些键值以规避这一问题。具体步骤如下: 1. 打开注册表编辑器(`regedit`)。 2. 定位到`HKEY_CLASSES_ROOT\Licenses`。 3. 创建一个新的键,名称为`4250E830-6AC2-11cf-8ADB-00AA00C00905`。 4. 在此键下创建名为`kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun`的子键,值为任意字符串。 以上步骤完成后,就可以正常注册并使用MSComm控件了。 #### 在项目中添加MSComm控件 1. **启动VS2005或VS2010**,打开你的项目。 2. **添加引用**: - 在解决方案资源管理器中,右键点击项目名,选择“属性”。 - 在弹出的对话框中选择“配置属性”>“用户宏”>“组件”。 - 添加新的ActiveX控件,搜索并选择“Microsoft Communications Control”,版本6.0。 3. **使用MSComm控件**: - 在项目的代码中声明控件实例,例如`CComControl<CMscommCtrl>`。 - 使用成员函数进行初始化和配置。 #### 配置与使用示例 以下是一些基本的配置示例: ```cpp m_mscomm.put_CommPort(1); // 设置使用COM1端口 m_mscomm.put_Settings(_T("4800,n,8,1")); // 设置波特率为4800bps,无校验,数据位为8,停止位为1 m_mscomm.put_RThreshold(1); // 设置接收阈值为1个字符 m_mscomm.put_SThreshold(0); // 设置发送阈值为0 m_mscomm.put_InputLen(100); // 设置输入缓冲区长度为100 m_mscomm.put_InputMode(0); // 设置输入模式为文本 m_mscomm.put_InBufferSize(1024); // 设置输入缓冲区大小为1024 ``` 完成这些设置后,使用`m_mscomm.put_PortOpen(TRUE)`打开串口。 当有数据接收时,可以通过`OnComm`事件处理函数来读取接收到的数据: ```cpp void CMScomDlg::OnCommMscomm() { // TODO: 在此处处理接收到的信息 CString str; switch (m_mscomm.get_CommEvent()) { case 2: // 如果是接收事件 str = CString(m_mscomm.get_Input().bstrVal); break; default: break; } } ``` 发送数据时,可以使用`m_mscomm.put_Output(VARIANT newValue)`函数,其中`newValue`为要发送的数据。 通过上述步骤,你可以在Visual Studio 2010或Visual Studio 2005中成功集成并使用MSComm控件进行串口通信的开发。
首先,我用的是VC2005,但在VC2005下没有这个控件,所以要借用一下VC6。控件名是MSCOMM32.OCX,如果安装了VC6或VB6的话,就能在/WINDOWS/System32下找到MSCOMM32.OCX,MSCOMM32.SRG,MSCOMM32.DEP三个文件。如果在开发的机器上没有安装VC6或VB6,同时也没有安装过使用的这个控件,则首先要对这个控件进行注册。注册方法是使用命令regsvr32 MSCOMM32.OCX,比如我就直接把找来的这三个文件放到我的System32下,同时新建一个文本文件,把命令regsvr32 MSCOMM32.OCX写到文本文件中,改扩展名为bat,直接双击这个bat就完成空间注册。另外,为了在VC2005中开发的时候能正常使用这个控件,还需要修改一下注册表,否则会出错。修改方法是将以下内容写到一个文本文件中,扩展名改为reg,然后双击这个文件导入就可以了。(此处注册表修改的内容也可以在MSCOMM32.SRG中找到)
REGEDIT
HKEY_CLASSES_ROOT/Licenses = Licensing: Copying the keys may be a violation of established copyrights.
// Comm Control 6.0 license key
HKEY_CLASSES_ROOT/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
完成以上的控件注册和注册表的修改后就可以开始程序的开发了。首先新建一个MFC对话框程序。然后在IDE的右侧打开“工具箱”,鼠标右击,在弹出菜单中点击“选择项”,在COM组件下找到Microsoft Communications Control,在其前面的选择框中打勾,一个黄色电话图标就会出现在工具箱里,用鼠标把这个图标拖进对话框资源编辑器里,控件就被添加到项目的程序中。
为了便于使用,我们可以给这个控件绑定一个控件变量,比如叫做m_mscomm,程序会自动添加一个CMscomm类封装这个控件,而m_mscomm就是这个类的一个对象。接下来就可以以此控件变量来使用控件了。
在正式开始收发数据前,要给控件设置适当的几个参数来初始化。
首先是指定端口号,使用方法m_mscomm.put_CommPort(1);,参数就是端口号,比如此处程序要使用COM1端口。
然后是波特率、奇偶校验、数据位和停止位,使用方法put_Settings(LPCTSTR newValue),参数是一个形如”*,*,*,*”字符串,比如我需要波特率4800,无奇偶校验,8位数据位和1作为停止位就可以如此操作,m_mscomm.put_Settings(_T(“4800, n, 8, 1”))。
m_mscomm.put_RThreshold(1)和m_mscomm.put_SThreshold(0)分别设定接收和发送数据的时候,引发接收数据的OnComm事件时缓冲区中的字符数量,0表示不触发OnComm事件,比如put_RThreshold(1)表示每接收到一个字符就处罚OnComm事件。
m_mscomm.put_InputLen(100)设定当前接收区数据长度为0,表示全部读取。
m_mscomm.put_InputMode(0)用来设定数据接收模式,1表示二进制,0表示文本。
m_mscomm.put_OutBufferSize(1024)和m_mscomm.put_InBufferSize(1024)分别设定输出和接收的缓冲区大小,单位是字节。
- woshiyixiantian2011-11-13内容偏少,不是想要的。。
- Daveee2013-08-19我想用vs05该怎么搞?
- linxiaoxin1245782013-06-10简单了点,不是很好
- 李洛克072013-06-20可以用,非常好用的,我在xp下试验过,不过vs2005之后串口驱动修改了,这个也得对应修改。
- bb5042012-08-03简单,用是可以用。
- 粉丝: 29
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端css样式工具文件
- win32diskimager
- DirectX9 键盘专用菜单.zip
- directX9c 的一个示例 .zip
- 1实验一:熟悉与配置R.zip
- DirectX9を使用した简单的な2Draiburari.zip
- DirectXMath 是一个全内联 SIMD C++ 线性代数库,可用于游戏和图形应用程序.zip
- DirectXMath 测试.zip
- DirectXMesh 几何处理库.zip
- QML实战 - 1、制作"卡片菜单"效果
- DirectXMesh 测试.zip
- 技嘉显卡 RTX3090 EAGLE 1.0 显卡维修图纸 原理图
- C#利用数据库中间表实现与AGV通信的技术实现
- GTX1660 Ti 显卡PCB图纸
- YOLO算法中的SxS网格机制:定义、实现与代码解析
- DirectXTex 测试.zip