一个关于VARIANT数据的问题

zhenglin306 2003-09-04 03:41:51
我使用MSComm控件进行串行通讯,可是在接收数据时出现了问题
发送数据用 UpdateData(TRUE); //读取编辑框内容
m_ctrlComm.SetOutput(COleVariant(m_strTXData));
接收到数据时
void CSCommTestDlg::OnComm()
{
CString m_strshow;
COleVariant vaTemp;
int len;
if(m_ctrlComm.GetCommEvent()==2)
{
len=m_ctrlComm.GetInBufferCount();
TRACE1("The InBufferCount is %d\n",len);

VARIANT vaInput=m_ctrlComm.GetInput();
vaTemp.ChangeType(VT_BSTR,(COleVariant*)&vaInput);
m_strshow=vaTemp.bstrVal;

len=m_strshow.GetLength();
TRACE1("m_strshow is %d long.\n",len);

m_strRXData+=m_strshow; //写入编辑框
}
UpdateData(FALSE);
}
如果发送一个字符,比如'a',就可以正常显示,
如果发送字符串,比如“abc”,就显示“扡c”,

麻烦大家帮我找找原因吧
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenglin306 2003-09-08
  • 打赏
  • 举报
回复
问题解决了,在于串口初始化m_ctrlComm.SetInputMode(0);
但是我还有一点不明白,InputMode 定义Input属性获取数据的方式(类型long,为0:文本方式;为1:二进制方式),这两种方式有什么不同?
zhenglin306 2003-09-07
  • 打赏
  • 举报
回复
我调试的时候是将串口的发送端和接收端相连,也就是自己发送给自己接收的,我用的是win2000的系统
zhenglin306 2003-09-07
  • 打赏
  • 举报
回复
使用CString m_strshow的时候先调用m_strshow.Format("");
我试过了,还是不行啊
csdnhbc20 2003-09-05
  • 打赏
  • 举报
回复
使用CString m_strshow的时候先调用m_strshow.Format("");
atEleven 2003-09-04
  • 打赏
  • 举报
回复
是不是发送的时候使用的不是UNICODE而使用ASCII?
zhenglin306 2003-09-04
  • 打赏
  • 举报
回复
能不能说的具体一点
忠向 2003-09-04
  • 打赏
  • 举报
回复
用位操作符把第0位置零看看

3,248

社区成员

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

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