VC应用程序接收串口数据问题

qingfeng029 2012-04-25 04:26:37
菜鸟提问一个简单问题,还请大家见谅:
VC接收串口数据是否用 m_ctrlComm.GetInput( );这条指令 (串口控件已加,串口也已打开)
因为发送数据直接用:m_ctrlComm.SetOutput(COleVariant(m_strTXData));是可行的


我直接 m_strRXData=m_ctrlComm.GetInput( );会报错
仿照发送数据用 COleVariant(m_strRXData)=m_ctrlComm.GetInput( );就不会报错,但下面不知道怎么用
比如串口发来0x01
我这样写 if(m_strRXData==0x01)
{
;
}

也不行

请帮忙解决一下,谢谢!!!
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingfeng029 2012-05-07
  • 打赏
  • 举报
回复
void CPlayerDlg::OnSize(UINT nType, int cx, int cy)  
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if(m_Player.m_hWnd != NULL)
{
CRect rt;
GetWindowRect(&rt);
m_Player.MoveWindow(0,0,rt.Width(),rt.Height());
}
}
qingfeng029 2012-05-07
  • 打赏
  • 举报
回复

void CPlayerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if(m_Player.m_hWnd != NULL)
{
CRect rt;
GetWindowRect(&rt);
m_Player.MoveWindow(0,0,rt.Width(),rt.Height());
}
}
qingfeng029 2012-05-07
  • 打赏
  • 举报
回复
void CPlayerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if(m_Player.m_hWnd != NULL)
{
CRect rt;
GetWindowRect(&rt);
m_Player.MoveWindow(0,0,rt.Width(),rt.Height());
}
}
sxqinge 2012-04-25
  • 打赏
  • 举报
回复
呵呵设置为成员变量就可以了啊:
CString m_strRXData;

void CWyf1Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
static float a,b,c;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
m_strRXData.Empty();//清空字符串
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
m_strRXData.Format("%02X",rxdata[k]); //将字符送入成员变量中存放
}
}
}

fishion 2012-04-25
  • 打赏
  • 举报
回复
类似这样使用
VARIANT var =m_ctrlComm.GetInput( );
if(var.vt == VT_BSTR)
{
m_strRXData = var.bstrVal;
if(m_strRXData.GetBuffer(0)[0] == 0x01)
{
}
m_strRXData.ReleaseBuffer();

}
qingfeng029 2012-04-25
  • 打赏
  • 举报
回复
我有这段程序的,但是我想在另一函数里接收数据,因为要根据接收的数做动作。如果我想调用接收到的数据,应该怎么做呢?要将变量strtemp设置为全局变量吗?谢谢
[Quote=引用 1 楼 的回复:]
你用的是MSCOMM控件吧?
在ONCOMM事件中进行接受,由于接受到的数据是VARIANT型的,所以需要COleSafeArray进行个中间转换,参考代码如下:

C/C++ code

void CWyf1Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
V……
[/Quote]
sxqinge 2012-04-25
  • 打赏
  • 举报
回复
你用的是MSCOMM控件吧?
在ONCOMM事件中进行接受,由于接受到的数据是VARIANT型的,所以需要COleSafeArray进行个中间转换,参考代码如下:

void CWyf1Dlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
static float a,b,c;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
strtemp.Format("%X",rxdata[k]); //将字符送入临时变量strtemp存放
}
}
}

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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