一个函数的实现:
DWORD CWinCESerialDlg::WritePort(TCHAR *buf, DWORD dwCharToWrite)
{
BOOL fWriteState;
DWORD dwBytesWritten; // 写入数据
fWriteState = WriteFile(hPort, buf, dwCharToWrite * sizeof(TCHAR), 
&dwBytesWritten, NULL);
if (!fWriteState)
{
// 不能写数据
//MessageBox(NULL, TEXT("Can't Write String to Comm"), 
// TEXT("Error"), MB_OK);
AfxMessageBox(TEXT("Can't Write String to Comm"), 
MB_OK, MB_ICONERROR);
dwBytesWritten = 0;
} return dwBytesWritten;
}我要用这个函数实现从一个EDIT BOX控件里得到数据发送给串口,这里:
void CWinCESerialDlg::OnBnClickedButtonSerialWrite()
{
// TODO: Add your control notification handler code here

}
这个函数里面我该怎么写呢?也说明下这样写的原因。

解决方案 »

  1.   

    EDIT BOX控件的变量名是m_ceSendserial
      

  2.   

    void CWinCESerialDlg::OnBnClickedButtonSerialWrite()
    {
        // TODO: Add your control notification handler code here
          WritePort(buf,m_ceSendserial);  
    }
    不知道是不是这样,直接从里面取
      

  3.   

    // 获取编辑框控件指针
    CEdit* pEdit = reinterpret_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
    if (pEdit && IsWindow(pEdit->GetSafeHwnd()))
    {
        // 从一个EDIT BOX控件里得到数据
        CString strEdit;
        pEdit->GetWindowText(strEdit);
        // 发送
        WritePort(strEdit, strEdit.GetLength()); //你这个WritePort函数用TCHAR*指针和用字符作单位,比较不符合常规啊。一般写入串口都是字节流和以字节作单位。
    }
      

  4.   

    void CWinCESerialDlg::OnBnClickedButtonSerialWrite()
    {
        // TODO: Add your control notification handler code here
        CString strSend = _T("");
        m_SendDataEdit.GetWindowText(strSend);  //m_SendDataEdit:Edit控件的CEdit对象
        WritePort(strSend,strSend.GetLength());
    }
    如果楼主是在WinCE系统下做开发,字符串操作要加_T("").
      

  5.   

    error C2664: 'CWinCESerialDlg::WritePort' : cannot convert parameter 1 from 'CString' to 'TCHAR *'这个问题该如何改呢?
      

  6.   

    前面说过了,你用TCHAR*作参数本来就不太规范,函数中不修改指针指向的内容的话,最好将指针参数声明为常量指针,即const TCHAR*,也即LPCTSTR,而CString是有LPCTSTR操作符的。如果不改,将CString变量强制转换为LPTSTR或者TCHAR*类型也可以通过编译,那就需要你自己控制好不要在函数中修改指针指向的内容,否则会出错。
      

  7.   

    解决了。CString strSend = _T(""); 
    m_ceSendserial.GetWindowText(strSend);  //m_SendDataEdit:Edit控件的CEdit对象 
    WritePort((LPTSTR)(LPCTSTR)strSend,strSend.GetLength());就OK了!
    感谢Mackz和luckyboy1979,谢谢!