DCB dcb;
if (!GetCommState(hCom,&dcb))
{
AfxMessageBox(_T("读取串口状态失败!"));
::CloseHandle(hCom);
return NULL;
}
总是告诉我读取串口状态失败,不知道是何原因,请指教
另外大家推荐几个比较好的串口通讯的原代码吧,谢谢!
if (!GetCommState(hCom,&dcb))
{
AfxMessageBox(_T("读取串口状态失败!"));
::CloseHandle(hCom);
return NULL;
}
总是告诉我读取串口状态失败,不知道是何原因,请指教
另外大家推荐几个比较好的串口通讯的原代码吧,谢谢!
试试我用的通讯类:
http://community.csdn.net/Expert/topic/4055/4055364.xml?temp=.677334
你也可用mscomm控件
谢谢了,我看看你给的那个
HANDLE hCom = ::CreateFile(strCom,GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,dwFlags,NULL); // 获得串口的配置信息
COMMCONFIG ComCfg;
DWORD dwSize = sizeof(ComCfg);
if (!::GetCommConfig(hCom,&ComCfg,&dwSize))
{
AfxMessageBox(_T("读取串口配置失败!"));
::CloseHandle(hCom);
return NULL;
}
// 获得当前的串口配置状态
DCB dcb;
if (!GetCommState(hCom,&dcb))
{
AfxMessageBox(_T("读取串口状态失败!"));
::CloseHandle(hCom);
return NULL;
}
可以看看CSerialPort类啊
网上搜一下就可以找到
看看我这个吧
你那个不行的要改一下
BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = { // 串口超时控制参数
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
100}; // 基本的(额外的)写超时时间: 100 ms hComm = CreateFile(pPort, // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件
if(hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败 GetCommState(hComm, &dcb); // 取DCB dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits; SetCommState(hComm, &dcb); // 设置DCB SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小 SetCommTimeouts(hComm, &timeouts); // 设置超时 return TRUE;
}
int nParity, int nByteSize, int nStopBits)
{
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = {
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms
100}; // 基本的(额外的)写超时时间: 100 ms hComm = CreateFile(
pPort, // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE,//读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING,// 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件
// 打开串口失败
if(hComm == INVALID_HANDLE_VALUE) return FALSE; GetCommState(hComm, &dcb);// 取DCB dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits; SetCommState(hComm, &dcb);// 设置DCB SetupComm(hComm, 4096, 1024);// 设置输入输出缓冲区大小 SetCommTimeouts(hComm, &timeouts);// 设置超时 return TRUE;
}
你的程序很清晰哦
我调试一下吧