【转载】给vs2005~~vs2010 添加串…
来源:互联网 发布:js alter 标题 编辑:程序博客网 时间:2024/06/06 08:23
前几天需要做一个COM口的通讯程序,主要是要接收一个传感器送来的船舶航行状态参数。过去没有接触过COM口编程,上网查查VC6下有个CommunicationControl可用,挺方便的,遂研究研究拿来用,整理一下学习笔记存档,并与网友分享。
首先,我用的是VC2005,但在VC2005下没有这个控件,所以要借用一下VC6。控件名是MSCOMM32.OCX,如果安装了VC6或VB6的话,就能在/WINDOWS/System32下找到MSCOMM32.OCX,MSCOMM32.SRG,MSCOMM32.DEP三个文件。如果在开发的机器上没有安装VC6或VB6,同时也没有安装过使用的这个控件,则首先要对这个控件进行注册。注册方法是使用命令regsvr32MSCOMM32.OCX,比如我就直接把找来的这三个文件放到我的System32下,同时新建一个文本文件,把命令regsvr32MSCOMM32.OCX写到文本文件中,改扩展名为bat,直接双击这个bat就完成空间注册。另外,为了在VC2005中开发的时候能正常使用这个控件,还需要修改一下注册表,否则会出错。修改方法是将以下内容写到一个文本文件中,扩展名改为reg,然后双击这个文件导入就可以了。(此处注册表修改的内容也可以在MSCOMM32.SRG中找到)
REGEDIT
HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may bea violation of established copyrights.
// Comm Control 6.0 license key
HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905= kjljvjjjoquqmjjjvpqqkqmq
完成以上的控件注册和注册表的修改后就可以开始程序的开发了。首先新建一个MFC对话框程序。然后在IDE的右侧打开“工具箱”,鼠标右击,在弹出菜单中点击“选择项”,在COM组件下找到MicrosoftCommunicationsControl,在其前面的选择框中打勾,一个黄色电话图标就会出现在工具箱里,用鼠标把这个图标拖进对话框资源编辑器里,控件就被添加到项目的程序中。
为了便于使用,我们可以给这个控件绑定一个控件变量,比如叫做m_mscomm,程序会自动添加一个CMscomm类封装这个控件,而m_mscomm就是这个类的一个对象。接下来就可以以此控件变量来使用控件了。
在正式开始收发数据前,要给控件设置适当的几个参数来初始化。
首先是指定端口号,使用方法m_mscomm.put_CommPort(1);,参数就是端口号,比如此处程序要使用COM1端口。
然后是波特率、奇偶校验、数据位和停止位,使用方法put_Settings(LPCTSTRnewValue),参数是一个形如”*,*,*,*”字符串,比如我需要波特率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)分别设定输出和接收的缓冲区大小,单位是字节。
比如,现在要接收数据的话,可以如下初始化程序。
view plaincopy to clipboardprint?
m_mscomm.put_CommPort(1);
根据我们在RThreshold中设定的参数,程序会在接收到参数中指定的字符后触发一个OnComm事件,我们就需要处理这个事件来提取接收到的数据。我们需要通过查询m_mscomm.get_CommEvent()来确定具体的事件类型,比如可能是发送也可能接收到了数据,比如在此我们要提取接收数据,事件对应的返回值应当是2。然后获得的数据就可以用m_mscomm.get_Input()来获得,这个函数返回一个VARIANT结构变量,如果我们接收的是字符串数据,那就是保存在bstrVal中,比如下面的代码就是在接收到数据时将接收到的字符串保存在str变量中。
view plaincopy to clipboardprint?
voidCMScomDlg::OnCommMscomm()
void CMScomDlg::OnCommMscomm()
原文http://blog.csdn.net/tianhen791/archive/2010/11/27/6039315.aspx
- 【转载】给vs2005~~vs2010 添加串…
- 给VS2008/VS2010 MFC项目添加…
- 如何给UIToolBar 添加 多个UIBarBu…
- VS2010给Activex添加接口
- 给VS2005的ListView添加排序功能
- 给VS2005的编辑器添加右边界线
- 给VS2005的编辑器添加右边界线
- 给VS2005的编辑器添加右边界线
- 给VS2005的编辑器添加右边界线
- [CUDA] 如何给vs2010添加cuda.rules?
- vs2010 中 MFC::CString…
- VS2010快捷键 visual st…
- 安装VS2010 Service Pac…
- windows7 VS2010 OpenCV2.2.…
- c# vs2010 directsound&…
- c# vs2010 directsound&…
- 【转载】mybatis3 添加ehcache支持
- 【转载】pthread_mutex_init …
- vector C++详细用法
- (转)VC++技术内幕(第四版)笔记--…
- SetMapMode SetViewportExt SetVie…
- VS使用技巧
- 骑行第一课
- 【转载】给vs2005~~vs2010 添加串…
- MySQL必知必会笔记(七)事务处理 全球化和本地化(字符集和校对)
- 开始USB驱动编程~~
- VS2010快捷键
- C++每日学习之引用
- python多进程分块读取文件
- C++每日学习之 重载和默认参数
- C++每日学习之+运算符重载
- matlab 实现串口通信 SERIAL