一个函数的实现:
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
}
这个函数里面我该怎么写呢?也说明下这样写的原因。
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
}
这个函数里面我该怎么写呢?也说明下这样写的原因。
{
// TODO: Add your control notification handler code here
WritePort(buf,m_ceSendserial);
}
不知道是不是这样,直接从里面取
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*指针和用字符作单位,比较不符合常规啊。一般写入串口都是字节流和以字节作单位。
}
{
// 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("").
m_ceSendserial.GetWindowText(strSend); //m_SendDataEdit:Edit控件的CEdit对象
WritePort((LPTSTR)(LPCTSTR)strSend,strSend.GetLength());就OK了!
感谢Mackz和luckyboy1979,谢谢!