添加MSCOMM控件(转子csdn)

首先去网上下载MSCOMM32.OCX,MSCOMM32.DEP,MSCOMM.SRG三个文档,然后把它拷贝到c:/windows/system32目录下面;

然后注册控件:在命令行里面敲 regsvr32   c:/windows/system32/mscomm32.ocx 回车。

我们还需要到注册表中增加键值,否则你使用mscomm控件的时候会提示没有经过授权的错误。

编辑1.reg文档,内容如下:

REGEDIT
HKEY_CLASSES_ROOT/Licenses = Licensing: Copying the keys may be a violation of established copyrights.
 
// The MsComm32 Control License follows:
HKEY_CLASSES_ROOT/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

保存后,双击1.reg。这样就可以使用了。

如果实在不行,请手动到注册表HKEY_CLASSES_ROOT/Licenses里添加4250E830-6AC2-11cf-8ADB-00AA00C00905项目,设定其值为kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun。

下面就可以开始使用MSCOMM控件编写串口处理程序了。

1.首先建立一个工程,无论你是建立单文档、基于对话框、多文档等等。

然后 点击 工程--->添加类;在添加表单中选择 activeX控件中的MFC类,点击添加;在弹出的表单中选择可用的控件,选择Mcriosoft Commmunications Control,V6.0 确定添加就OK了。

哈哈,现在你的工程里面就有了MSCOMM类了,你可以使用此类。

2.在你的工程的.h文件中 #include"mscomm.h",然后添加如下:

在protected下面添加://如果你要使用事件处理函数

 DECLARE_EVENTSINK_MAP()

在public下面添加:

 CMSComm  m_MSComm;//这里只是为了申明一个CMSComm类实例,以便后续和你添加到MSComm1控件关联使用。

3.然后的任务就是使用m_MSComm实例使用串口,你可以新建一个按钮,然后在其双击事件中加入初始化串口的代码如下:

 

  1. m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);   
  2.     if(m_MSComm.get_PortOpen())//如果串口已经打开,先关闭它   
  3.     {   
  4.         m_MSComm.put_PortOpen(FALSE);   
  5.     }   
  6.     m_MSComm.put__CommPort(1);//设定使用串口1   
  7.     m_MSComm.put_InBufferSize(1024);//设定串口发送数据缓冲区大小   
  8.     m_MSComm.put_OutBufferSize(1024);//设定串口接收数据缓冲区大小   
  9.     m_MSComm.put_InputLen(0);//设置当前接收区数据为0表示全部读取   
  10.     m_MSComm.put_InputMode(1);//以二进制方式读取数据   
  11.     m_MSComm.put_RThreshold(1);//当接收缓冲区有1个或以上数据时读取   
  12.     m_MSComm.put_Settings(_T("9600,n,8,1"));//设定波特率9600无检验位,8个数据位,1个停止位   
  13.   
  14.     if (!m_MSComm.get_PortOpen())//如果串口是关闭的,打开串口   
  15.     {   
  16.         m_MSComm.put_PortOpen(TRUE);   
  17.     }   
  18.     else//如法打开则提示错误   
  19.     {   
  20.         AfxMessageBox(_T("Open Serial Port failue!"),MB_OK,0);   
  21.     }   
  22.     m_MSComm.get_Input();   
  23.     Sleep(3000);   
  24.     COleVariant V1(L"OK,YOU CAN SEND DATA TO COMM1!");//这里定义你要发送到字符   
  25.     m_MSComm.put_Output(V1.Detach());//发送数据   
  26.     Sleep(3000);   
  27.     MessageBox(TEXT("ok,the port will close!"),MB_OK,0);   
  28.     m_MSComm.put_PortOpen(FALSE);//先预读取缓冲区,清空缓冲区数据  
  1. m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);  
  2.     if(m_MSComm.get_PortOpen())//如果串口已经打开,先关闭它   
  3.     {  
  4.         m_MSComm.put_PortOpen(FALSE);  
  5.     }  
  6.     m_MSComm.put__CommPort(1);//设定使用串口1   
  7.     m_MSComm.put_InBufferSize(1024);//设定串口发送数据缓冲区大小   
  8.     m_MSComm.put_OutBufferSize(1024);//设定串口接收数据缓冲区大小   
  9.     m_MSComm.put_InputLen(0);//设置当前接收区数据为0表示全部读取   
  10.     m_MSComm.put_InputMode(1);//以二进制方式读取数据   
  11.     m_MSComm.put_RThreshold(1);//当接收缓冲区有1个或以上数据时读取   
  12.     m_MSComm.put_Settings(_T("9600,n,8,1"));//设定波特率9600无检验位,8个数据位,1个停止位   
  13.   
  14.     if (!m_MSComm.get_PortOpen())//如果串口是关闭的,打开串口   
  15.     {  
  16.         m_MSComm.put_PortOpen(TRUE);  
  17.     }  
  18.     else//如法打开则提示错误   
  19.     {  
  20.         AfxMessageBox(_T("Open Serial Port failue!"),MB_OK,0);  
  21.     }  
  22.     m_MSComm.get_Input();  
  23.     Sleep(3000);  
  24.     COleVariant V1(L"OK,YOU CAN SEND DATA TO COMM1!");//这里定义你要发送到字符   
  25.     m_MSComm.put_Output(V1.Detach());//发送数据   
  26.     Sleep(3000);  
  27.     MessageBox(TEXT("ok,the port will close!"),MB_OK,0);  
  28.     m_MSComm.put_PortOpen(FALSE);//先预读取缓冲区,清空缓冲区数据  

 

 

posted @ 2012-05-28 19:01  well_L  阅读(669)  评论(0编辑  收藏  举报