问一下为什么我用MSComm控件带的SetOutput函数发送Byte类型的字符串的时候老是报错啊??

shanquan20051981 2005-12-19 11:03:32
我现在编一个串口的程序.是用的MSComm控件.

我构造了一个发送的字符串,是bytSend[7]数组,类型是BYTE,构造完了之后调用MSComm类里面的SetOutput函数发送,我看见SetOutput函数的为:
void CMSComm::SetOutput(const VARIANT& newValue)
{
static BYTE parms[] =
VTS_VARIANT;
InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,
&newValue);
}

我就用COleVariant转换bytSend数组的,就是m_Com.SetOutput(COleVariant(bytSend));(这里的m_Com是对应控件MScomm的变量).完整的发送程序如下:

void CCommPortDlg::OnSelchangeComboDay()
{
BYTE bytSend[7];//发送字符串
int i,temp;


// TODO: Add your control notification handler code here
//这里就是说确定选择的天数,0表示当天,1表示前一天,等等
Day=m_SelDay.GetCurSel();//选择哪一天

//------构造发送字符串--------
bytSend[0]=0xEB;
bytSend[1]=0x90;
bytSend[2]=0x80+Day;
bytSend[3]=0x01;
bytSend[4]=0x00;
bytSend[5]=0x07;

for(i=0,temp=0;i<6;i++)
temp=temp+bytSend[i];
temp=temp%256;
bytSend[6]=temp;

//----------------------------

OpenPort();//打开串口

wan=0;

m_Com.SetOutput(COleVariant(bytSend));//<----这一行会报错.

}

而且报错的内容是:error C2440: 'type cast' : cannot convert from 'unsigned char [7]' to 'class COleVariant'

搞了半天还是搞不出来,大家帮帮忙啊,谢谢谢谢
...全文
1315 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanquan20051981 2005-12-19
  • 打赏
  • 举报
回复
我做出来了,不过还是十分十分感谢大家
我的程序如下:
void CCommPortDlg::OnSelchangeComboDay()
{
BYTE bytSend[7];//发送字符串
int i,temp;
CByteArray arraySend;


// TODO: Add your control notification handler code here
//这里就是说确定选择的天数,0表示当天,1表示前一天,等等
Day=m_SelDay.GetCurSel();//选择哪一天

//------构造发送字符串--------
bytSend[0]=0xEB;
bytSend[1]=0x90;
bytSend[2]=0x80+Day;
bytSend[3]=0x01;
bytSend[4]=0x00;
bytSend[5]=0x07;

for(i=0,temp=0;i<6;i++)
temp=temp+bytSend[i];
temp=temp%256;
bytSend[6]=temp;

//----------------------------

//-----转化为CByteArray格式---
arraySend.RemoveAll();
arraySend.SetSize(7);
for(i=0;i<7;i++)
{
arraySend.SetAt(i,bytSend[i]);
// temp=arraySend.GetAt(i); //通过这里的测试说明这里的数据确实是存在arraySend里面了
}
//----------------------------
OpenPort();//打开串口

wan=0;
total=0;
totalReceiveLen=0;
intReceiveLen=0;
LENGTH=0;
Door1=false;
Door=false;
Success=false;

m_Com.SetOutput(COleVariant(arraySend));
// m_Com.SetOutput(bytSend);

}

程序已经调通,可以串口查询的了.
但是还是十分十分谢谢大家
DISCIP_1 2005-12-19
  • 打赏
  • 举报
回复
我是直接考给你的,你注意一下,用CByteArray就可以了!
DISCIP_1 2005-12-19
  • 打赏
  • 举报
回复
用这个吧,我调通了的!
void CSCommTestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //读取编辑框内容
if(m_ctrlHexSend.GetCheck())
{
CByteArray hexdata;
int len=String2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据
}
else
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送ASCII字符数据

}
shanquan20051981 2005-12-19
  • 打赏
  • 举报
回复
一开始我就是直接写的,也不对的
章月庭 2005-12-19
  • 打赏
  • 举报
回复
直接写
m_Com.SetOutput(bytSend);//

16,472

社区成员

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

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

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