串口通信问题

feixiangdeyu12 2009-07-03 01:39:46
代码如下:
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
if(len>=6) {M=len/6; M=M*6;}//?
for(k=0;k<M;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
bt=*(char*)(rxdata+k); //字符型
}
}
为什么要把VARIANT型变量转换为ColeSafeArray型变量?
VARIANT型变量和ColeSafeArray型变量有什么区别吗?
直接safearray_inp=m_ctrlComm.GetInput()不行吗?
得到有效数据长度指的是得到了多少个字节还是字符?
if(len>=6) {M=len/6; M=M*6;}这句干吗的?
for(k=0;k<M;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
bt=*(char*)(rxdata+k); //字符型
}
这段干吗的?
k是int型的,可以前面加&这个吗,什么意思?
问题比较多,比较基础,希望大家帮忙


...全文
49 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixiangdeyu12 2009-07-03
  • 打赏
  • 举报
回复
谢谢大家
Conry 2009-07-03
  • 打赏
  • 举报
回复
在VC下面还是直接用串口API操作好一些

控件是给VB等语言用的
BAKER_LEE 2009-07-03
  • 打赏
  • 举报
回复
COleSafeArray derives from the OLE VARIANT structure.
ColeSafeArray是类,VARIANT是结构。
提供了处理VARIANT的成员函数,就是为了使用方便。
M是int型的,M=len/6;M=M*6;是为了保证M是6的倍数。
那个循环就是说把safearray_inp中的数据取出来放在rxdata中。

个人水平有限,只能做出以上分析,见谅。
快乐鹦鹉 2009-07-03
  • 打赏
  • 举报
回复
for(k=0;k <M;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
bt=*(char*)(rxdata+k); //字符型
}
这段干吗的?
k是int型的,可以前面加&这个吗,什么意思?
==&k是因为GetElement要求第一个参数是int*或者void*等指针类型。
rxdata应该是一个BYTE指针吧,用于存储safearray_inp中的第k个6位码转换成的字节数据,它记录在rxdata字节数组中
快乐鹦鹉 2009-07-03
  • 打赏
  • 举报
回复
为什么要把VARIANT型变量转换为ColeSafeArray型变量?
VARIANT型变量和ColeSafeArray型变量有什么区别吗?
直接safearray_inp=m_ctrlComm.GetInput()不行吗?
==应该可以。比较好的编码风格。
快乐鹦鹉 2009-07-03
  • 打赏
  • 举报
回复
if(len>=6) {M=len/6; M=M*6;}这句干吗的?
显然是取整数倍的,M只需要是6的整数倍,去掉余数。
贪玩的老鼠 2009-07-03
  • 打赏
  • 举报
回复
问题1,2 m_ctrlComm是一个COM组建,COM组件返回可变数组一般采用VARIANT变量传递.COleSafeArray是从VARIANT派生出来的.safearray_inp=(COleSafeArray)m_ctrlComm.GetInput(); 是可以的.
//if(len>=6) {M=len/6; M=M*6;}这句干吗的?
这句话是表示接收的数据应该是6的倍数,这个应该跟协议有关.
//safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
这是因为GetElement函数需要的是数组的indexes 指针,所以要传K的地址进去.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧