VS2010编写的串口程序,用串口精灵测试能发送数据。但是在接收的编辑框中不能显示字符,还请高手指教。 5

BOOLCSCommTestDlg::OnInitDialog(){CDialogEx::OnInitDialog();//将“关于...”菜单项添加到系统菜单中。//I... BOOL CSCommTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
// CString str;
// str = "hello world!";
// SetDlgItemText (IDC_EDIT_RECV, str);
if (m_cComm.get_PortOpen())
m_cComm.put_PortOpen(FALSE);
m_cComm.put_CommPort(2);
m_cComm.put_InputMode(1);
m_cComm.put_InBufferSize(1024);
m_cComm.put_OutBufferSize(512);
m_cComm.put_Settings(TEXT("9600, n, 8, 1"));
m_cComm.put_Settings(_T("9600, n, 8, 1"));
if (!m_cComm.get_PortOpen())
{
m_cComm.put_PortOpen(TRUE);
m_cComm.put_RThreshold(1);
m_cComm.put_InputLen(0);
m_cComm.get_Input();
}
else
{
AfxMessageBox(TEXT("打开端口失败!"),MB_ICONSTOP,0);
AfxMessageBox(_T("打开端口失败!"),MB_ICONSTOP,0);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
/***********************************************************/
void CSCommTestDlg::OnButtonSend()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//读取编辑框中的内容
m_cComm.put_Output(COleVariant(m_strSendData));//发送数据
m_strSendData.Empty();
UpdateData(false);
}
/***********************************************************/

void CSCommTestDlg::OnComm()
{
// TODO: 在此添加命令处理程序代码
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
byte rxdata[2048];
CString strtemp, str;
if (m_cComm.get_CommEvent()==2)
{
variant_inp = m_cComm.get_Input();//读取缓冲区数据
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();//得到有效的数据长度
for (k=0; k<len; k++)
{
safearray_inp.GetElement(&k, rxdata + k);//转换成BYTE型数组
}
for (k=0; k<len; k++)
{
char bt = *(char*)(rxdata + k);
strtemp.Format(TEXT("%c"),bt);
strtemp.Format(_T("%c"),bt);
m_strRecvData += strtemp;
}

}
CString temp = (TEXT("\r\n"));
m_strRecvData += temp;
UpdateData(false);
// str = "hello world!";
// GetDlgItemText (IDC_EDIT_RECV, m_strRecvData);
// SetDlgItemText (IDC_EDIT_RECV, str);
}
展开
 我来答
cjj796
2013-10-27 · TA获得超过8709个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3496万
展开全部
你好!!
你的接收触发是正常的吗?

接收数据的时候要采用委托的方式完成。
匿名用户
2013-10-18
展开全部
开发工具是VS2010
但还是用 mscomm控件?

为什么不用 Serialport 组件?
更多追问追答
追问
现在我主要用的这个控件 哈,不过也谢谢了。
追答
Serialport 组件  是 mscomm控件 的升级版
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式