科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道VC 中用通讯控件开发串行通信程序

VC 中用通讯控件开发串行通信程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   本文详细介绍了Visual C 5.0版中有关通讯控件的使用方法,并给出了一个利用该控件编写的简单通用的通信示例程序。 关键词:串行通信 通讯控件 随着Win 95的逐步普及,程序员们越来越愿意在Win95下编程。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  

    再打开ClassWizard,选中IDC_MSCOMM,可看到该控件能响应的消息为OnComm,添加改函数并将其改名为OnComm(),在该函数中添加代码,就能实现对串口事件的处理。其中一个需要注意的问题是函数GetInput()返回的是VARIANT型变量,而在编辑框中显示的是CString型变量,因此必需进行转换。先将VARIANT型变量转换为COleSafeArray型变量,再将其转换为BYTE型数组,然后将数组转换为CString型变量。这个转换过程看起来比较复杂,但它可以满足用不同的变量类型来显示接收数据。该程序的主要代码添加在CommTestDlg.cpp中,如下所示:

void CCommTestDlg::OnSend()

{

    if(!m_Comm.GetPortOpen())

       m_Comm.SetPortOpen(TRUE);//打开串口

    UpdateData(TRUE);

   m_Comm.SetOutput(COleVariant(m_SendData));//发送数据

}

void CCommTestDlg::OnClear()

{

    m_ReceiveData.Empty();//清除接收对话框中的数据

    m_SendData.Empty();//清除发送对话框中的数据

  UpdateData(FALSE);

}

void CCommTestDlg::OnComm()

{

   VARIANT m_Input1;

    COleSafeArray m_Input2;

    long length,i;

    BYTE data[1024];

    CString str;

   if(m_Comm.GetCommEvent()==2)//接收缓冲区内有字符

    {

       m_Input1=m_Comm.GetInput();//读取缓冲区内的数据

       m_Input2=m_Input1;//将VARIANT型变量转换为COleSafeArray型变量

       length=m_Input2.GetOneDimSize();//确定数据长度

       for(i=0;i<length;i++)

           m_Input2.GetElement(&i,data+i);//将数据转换为BYTE型数组

      for(i=0;i<length;i++)//将数组转换为CString型变量

       {

           char a=*(char*)(data+i);

          str.Format("%c",a);

           m_ReceiveData+=str; 

       }

    }

   UpdateData(FALSE);//更新编辑框内容

}

四.   试验程序

    现在程序已经写完,可以编译运行。我们可以做一个小实验来验证程序的功能。首先检验你的串口2,看它是否工作正常,可用常见的DOS程序Comdebug检查。确认串口工作正常后,可用串口线将两台微机的串口2相连,同时在两台机子上运行该程序(也可只用一台微机,将其串口2的2脚和3脚短接,即自发自收状态),在发送对话框中随便敲入一些字符,用鼠标点发送按钮,你就会在另一台机子的接收对话框中看到这些数据,甚至汉字也可以发送。由此可见,利用通讯控件可以很容易的编写出串行通信程序。但相对来说通讯控件在VC中的使用要比在VB中复杂的多,要想开发出更多更灵活的使用方法还需要不断的摸索和实践。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章