VC 串口控件 MSComm控件

MSComm控件

  Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。

  要使用ActiveX控件MSComm,程序员必须将其添加入工程,其方法是:

  (1)单击主菜单project的子菜单Add To project的Components and Controls选项;

  (2)在弹出的"Components and Controls Gallery"对话框中选择Registered ActiveX Controls文件夹中的"Microsoft Communications Control,version 6.0"选项,如下图:


  单击其中的"Insert"按钮,MSComm控件就被增加到工程中了。与此同时,类CMSComm的相关文件mscomm.h和mscomm.cpp也一并被加入Project的Header Files和Source Files中。当然,程序员可以自己修改文件名,如下图:


  直接分析mscomm.h头文件就可以完备地获取这个控件的使用方法(主要是public类型的接口函数),下面我们摘取了头文件的主要代码并对其关键部分给出了注释:

#if !defined(AFX_MSCOMM_H__) #define AFX_MSCOMM_H__  #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file. If this class is regenerated by // Microsoft Visual C++, your modifications will be overwritten.
///////////////////////////////////////////////////////////////////////////// // CMSComm wrapper class
class CMSComm : public CWnd { protected:  DECLARE_DYNCREATE(CMSComm) public:  CLSID const& GetClsid()  {   static CLSID const clsid = { 0x648a5600, 0x2c6e, 0x101b, { 0x82, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14 } };   return clsid;  }  virtual BOOL Create(LPCTSTR lpszClassName,    LPCTSTR lpszWindowName, DWORD dwStyle,    const RECT& rect,    CWnd* pParentWnd, UINT nID,    CCreateContext* pContext = NULL)  { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }
 BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,    const RECT& rect, CWnd* pParentWnd, UINT nID,    CFile* pPersist = NULL, BOOL bStorage = FALSE,    BSTR bstrLicKey = NULL)  { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,   pPersist, bStorage, bstrLicKey); }
  // Attributes  public:
  // Operations  public:   void SetCDHolding(BOOL bNewValue);   BOOL GetCDHolding();   void SetCommID(long nNewValue);   long GetCommID();   void SetCommPort(short nNewValue);   //设置端口号,如nNewValue =1表示COM1   short GetCommPort();   void SetCTSHolding(BOOL bNewValue);   BOOL GetCTSHolding();   void SetDSRHolding(BOOL bNewValue);   BOOL GetDSRHolding();   void SetDTREnable(BOOL bNewValue);   BOOL GetDTREnable();   void SetHandshaking(long nNewValue);   long GetHandshaking();   void SetInBufferSize(short nNewValue);   short GetInBufferSize();   void SetInBufferCount(short nNewValue);   short GetInBufferCount();   void SetBreak(BOOL bNewValue);   BOOL GetBreak();   void SetInputLen(short nNewValue);   short GetInputLen();   void SetNullDiscard(BOOL bNewValue);   BOOL GetNullDiscard();   void SetOutBufferSize(short nNewValue);   short GetOutBufferSize();   void SetOutBufferCount(short nNewValue);   short GetOutBufferCount();   void SetParityReplace(LPCTSTR lpszNewValue);   CString GetParityReplace();   void SetPortOpen(BOOL bNewValue);   //打开或关闭串口,TRUE:打开,FALSE:关闭   BOOL GetPortOpen();   //串口是否已打开,TRUE:打开,FALSE:关闭   void SetRThreshold(short nNewValue);   //如果设置为1,表示一接收到字符就发送2号事件   short GetRThreshold();   void SetRTSEnable(BOOL bNewValue);   //硬件握手使能?   BOOL GetRTSEnable();   void SetSettings(LPCTSTR lpszNewValue);   //Settings由4部分组成,其格式为:"BBBB,P,D,S",即"波特率,是否奇偶校验,数据位 //个数,停止位",如设置为:"9600,n,8,1"   CString GetSettings();   void SetSThreshold(short nNewValue);    //如果保持缺省值0不变,则表示发送数据的过程中串口上不发生事件   short GetSThreshold();   void SetOutput(const VARIANT& newValue);   //一个非常重要的函数,用于写串口,注意其接收的输入参数为VARIANT类型对象,    //我们需要将字符串转化为VARIANT类型对象   VARIANT GetOutput();   void SetInput(const VARIANT& newValue);   VARIANT GetInput();   //一个非常重要的函数,用于读串口,注意其返回的是VARIANT类型对象,我们需要   //将其转化为字符串   void SetCommEvent(short nNewValue);   short GetCommEvent();   //一个非常重要的函数,获得串口上刚发生的事件("事件"可以理解为软件意义上的   //"消息"或硬件意义上的"中断"),事件的发送会导致OnComm消息的诞生!   void SetEOFEnable(BOOL bNewValue);   BOOL GetEOFEnable();   void SetInputMode(long nNewValue);   long GetInputMode();  };
 //{{AFX_INSERT_LOCATION}}  // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif

  分析上述源代码可知,基本上,MSComm的诸多接口可以分为如下几类:

  (1)打开与设置串口接口函数;

  (2)获得串口设置和串口状态接口函数;

  (3)设置串口发送数据方式、缓冲区接口及发送数据接口函数;

  (4)设置串口接收数据方式、缓冲区接口及接收数据接口函数;

  (5)设置与获取串口上发生的事件接口函数。

时间: 2024-11-04 19:04:30

VC 串口控件 MSComm控件的相关文章

MFC串口的编程 mscomm控件与SerialPort类

MFC制作上位机,首先需要了解的是串口的编程,一般有两种方法,一个是使用ActiveX控件,例如mscomm串口控件,还有一个是用SerialPort类或者一些其他的串口类,这两个的区别是使用SerialPort类不需要注册控件,在其他没有安装控件的电脑上也能够用. 一·使用mscomm串口控件 使用mscomm串口控件的方法网上一大堆,大致说一些方法和一些需要注意的地方.如果是使用VC6.0在WIN7上来编写就会有个问题会通常说添加控件的方法为选中项目à“工程”à“添加到工程”à“Compon

请教C#用MSComm控件上位机软件接收问题!!

C#用MSComm写的工控软件,如果是终端直接发给软件,正常,终端通过另一个终端中转,软件一旦接收数据,无论大小,都卡死一会,请大神解答啊!!! private void axMSComm1_OnComm(object sender, EventArgs e) {   if (axMSComm1.CommEvent == 2)  {       textBox1.Text = textBox1.Text + (string )axMSComm1.Input;//测试1 // buff = (by

Visual Studio 2008 添加MScomm控件的方法

1.下载MSCOMM.zip,解压后包含4个文件:MSCOMM32.OCX, MSCOMM.SRG, MSCOMM32.DEP, MSCOMM32.OCA 2.将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹system32中,(C:\windows\system32): 如果是64位系统,将Mscomm32.ocx拷入到 C:\Windows\SysWOW64 3.用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->

解决VS2010使用mscomm控件无法接收数据的问题【转】

之前有用过VC6的mscomm控件.所以这次也想继续用此控件实现此功能,结果没想到刚一上手还真的绕了不少弯子.主要是因为VC2010下对mscomm控件的添加,以及对控件成员变量的添加有点小繁琐,特此把个人实践的经验写下来以供新人参考.说明一下,本人用的xp+VS2010. 如果你正在使用2010,并且想用mscomm控件,遇到如下问题,那你可以看看这篇文章. 1. 添加了mscomm控件以及对应的控件变量以后发现以前mscomm的成员函数,类似setsettings(),commport(),

Mscomm控件安装问题 License information for TMSComm not found.

操作步骤: 1.打开delphi,菜单选择compoents->import Activex control,然后选择那个mscomm32.ocx安装即可. 2.注册MScomm控件   开始->运行-> regsvr32 MScomm32.ocx 如果在delphi中使用Mscomm控件出现如下错误提示: “License information for TMSComm not found.You cannot  use this  control in design mode.” 则

Android培训准备资料之UI一些相似控件和控件一些相似属性之间的区别

这一篇博客主要收集五大布局中的一些相似控件和控件一些相似属性之间的区别 ImageView ImageButton Button 三者有啥区别? (1)Button继承自TextView,ImageView继承自View,ImageButton继承自ImageView                                              (2)Button支持android:text属性,而ImageButton和ImageView不支持,但是ImageView和ImageB

zw版【转发·台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换

zw版[转发·台湾nvp系列Delphi例程]Delphi 使用 HALCON库件COM控件数据格式转换 Delphi 使用 HALCON库件COM控件数据格式转换,与IHObjectX接口有关 var rg0,rg1 : HRegionX;begin rg0 := CoHRegionX.Create; rg0.GenRectangle1(10,10,150,150); rg1 := CoHRegionX.Create; rg1.GenRectangle1(200,200,250,250); r

Silverlight中获取控件中子控件

如题:,直接来看代码: /// <summary> /// 查找并返回第一个 相同 name的子元素 /// </summary> /// <typeparam name="T">需要查找 的子控件 类型</typeparam> /// <param name="obj">需要查找其下面子控件的 控件 类型</param> /// <param name="childName&q

C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序 2.效果图: 如下图所示,多窗体嵌套,其中一个是父窗体,其条是子窗体. 横向排列下面的窗体: 纵向排列下面的窗体: 关闭全部子窗