作业帮 > 综合 > 作业

谁能帮我解释一下这段程序的意思?最好每一句特别是开头那几句有什么作用?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 01:35:58
谁能帮我解释一下这段程序的意思?最好每一句特别是开头那几句有什么作用?
VARIANT variant_inp;
COleSafeArray safearray_inp;
long k=0;
int len;
BYTE rxdata[2048];
CString strtemp;
if(m_ctrlComm.GetCommEvent())
{
case 2:
{
variant_inp=m_ctrlComm.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k
小弟只有10年VC++经验,帮你解读一下哦:满意的话麻烦给我分.
如下代码是为了实现:接收串口过来的数据!首先初始化一个泛型类型接受容器,接收串口接口发来的数据,然后显示在界面上的edit控件上!
VARIANT variant_inp; 用VARIANT 泛型变量类型 定义一个数组变量variant_inp; 泛型就是任何类型都可以放进去的意思.作为缓冲池使用很适合.
COleSafeArray safearray_inp; 用COleSafeArray用OLE安全数据容器类 定义一个对象名字是 safearray inp 因为VARIANT虽然可以放任何类型数据到这个数组中,但该类型没有丰富的处理成员函数,说白了他是结构体不是类,所以 需要做个转换,转为COleSafeArray类型的数组类即可.他具有非常丰富的成员函数.
那么,你会问为什么不直接让safearray_inp=m_ctrlComm.GetInput(); 读缓冲区,而要经过一个中间变量呢?
variant_inp=m_ctrlComm.GetInput(); 读缓冲区
safearray_inp=variant_inp; VARIANT转换成COleSafeArray型变量
VARIANT和COleSafeArray 是什么关系呢?
原因是:
这中间有调用不同的重载=运算符,m_ctrlComm.GetInput(); 的数据可以转化为variant_inp,有默认的转化方式,而safearray_inp=variant_inp则是另一个转化方式,如果直接转,可能数据不对.
VARIANT和COleSafeArray 一个是结构体,一个是类,各自的数据构造不一样.
long k=0; 初始化一个长整型变量 k=0;
int len; 定义长度len,整数型.
BYTE rxdata[2048]; 定义接受数据的数组,2k大小,2048字节.为BYTE类型,也即unsigned char类型.
CString strtemp; 定义一个CString类型的字符串strtemp;
if(m_ctrlComm.GetCommEvent()) 如果控制通信对象m_ctlComm有get的事件发生,
{
------------------------
这里应该加switch(ret) ,将上面getcommevent赋值给ret.
case 2:事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); 控制通信器对象得到输入数据流.如果GetCommEvent返回2,说明有字符到达了,接收缓冲区内有字符
safearray_inp=variant_inp; 将variant inp转换为COleSafeArray 类型,付给safearry inp.因为COleSafeArray提供了丰富的函数处理.符合我们的需要.
len=safearray_inp.GetOneDimSize(); 获取输入安全数组的长度len
for(k=0;k