网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
在Visual C++ 6.0中使用串行通讯控件
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
要做一些额外的工作。
2.发送通讯数据
在Visual C++ 中,通讯控件发送数据的任务是由其接口成员函数SetOutput来实现的,该函数使用的参数是const VARIANT &newValue。VARIANT其实是一个C++结构类型,COleVariant类型对VARIANT做了进一步的封装和扩展,提供了许多新的功能和操作方法,支持OLE自动化,且更容易向其数据成员填入数据。由于COleVariant类型由VARIANT派生而来,因此将COleVariant类型的变量传递给SetOutput函数更为方便。另外,SetOutput的参数newValue类型必须是存放字节类型数据的动态数组。因此,可以利用Visual C++提供CByteArray类型来构造COleVariant类型的对象,并将其传递给SetOutput函数。对CByteArray类型变量的操作相对来说要容易的多,比如其成员函数SetSize可用来设置动态数组的大小,下标操作符可用来为其元素赋值等等。下面的程序代码可实现将存放在缓冲区strBuf中的100个字节的数据通过通讯控件发送出去:
……
BYTE strBuf[128];
CByteArray OutBuf;
COleVariant varOutput;
……
OutBuf.SetSize(100);
for(i=0;i<100;i++)OutBuf[i] = strBuf[i];
varOutput = OutBuf;
m_pCommDlg->m_Comm.SetOutput(varOutput);
……
利用通讯控件发送数据的关键在于构造COleVariant类型的变量,并向其中填入通讯数据,使其能满足通讯控件的成员函数SetOutput的需要。上面的程序语句varOutput = OutBuf可以直接写成:
COleVariant varOutput(OutBuf);
但这样必须将变量varOutput的定义语句COleVariant varOutput删除掉。
3.接收通讯数据
通讯控件接收通讯数据的任务是通过其接口成员函数GetInput来实现的,该函数的返回值的类型为VARIANT,同样我们可以将其赋值给COleVariant类型的变量。进一步,我们必须知道,该函数返回值变量的有效成员为parray,其类型定义为SAFEARRAY FAR*,即parray为一个安全数组指针,且数组的元素类型为BYTE。因此,对GetInput函数返回值的访问,可以通过安全数组操作函数来实现,比如:读取数组的维数、下边界、上边界以及各个元素的实际的值等。该返回值变量所对应的安全数组的维数为1,下边界为0。根据上述分析,下面的程序代码基本能够实现利用通讯控件接收通讯数据:
CByteArray ByteBuf;
COleVariant varInput;
long ix,l,u;
BYTE bit;
……
varInput = m_pCommDlg->m_Comm.GetInput();
if(varInput.parray!=NULL)
{
SafeArrayGetLBound(varInput.parray,1,&l);
SafeArrayGetUBound(varInput.parray,1,&u);
for(ix=l;ix<=u;ix++)
{
SafeArrayGetElement(varInput.parray,&ix,&bit);
ByteBuf.Add(bit);
}
}
……
4.小结
本文讲述的利用通讯控件发送与接收通讯数据都是基于二进制来实现的,基于文本的情况基本与此类似。要想利用好通讯控件还有其他一些应该注意的地方,比如波特率的设置、接收与发送缓冲区的设置以及通讯过程中的延时问题的处理等等。

  • 下一篇资讯: 编写漏洞扫描器
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号