HANDLE hPort;
char sName[15];
sprintf(sName,"\\\\.\\com%d",port);
hPort = CreateFile(sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hPort == INVALID_HANDLE_VALUE)
return -1;
SetupComm(hPort,1024,512);
PurgeComm(hPort,PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
char sSetting[80];
sprintf(sSetting,"%s: baud=%d parity=N data=8 stop=1",sName,boud);
DCB dcb;
GetCommState(hPort,&dcb);
if(!BuildCommDCB(sSetting,&dcb))
{
CloseHandle(hPort);
return -1;
}
if(!SetCommState(hPort,&dcb))
{
CloseHandle(hPort);
return -1;
} COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = interval;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0; if(!SetCommTimeouts(hPort,&CommTimeOuts))
{
CloseHandle(hPort);
return -1; }
m_hPort=hPort;
return 0;
char sName[15];
sprintf(sName,"\\\\.\\com%d",port);
hPort = CreateFile(sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hPort == INVALID_HANDLE_VALUE)
return -1;
SetupComm(hPort,1024,512);
PurgeComm(hPort,PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
char sSetting[80];
sprintf(sSetting,"%s: baud=%d parity=N data=8 stop=1",sName,boud);
DCB dcb;
GetCommState(hPort,&dcb);
if(!BuildCommDCB(sSetting,&dcb))
{
CloseHandle(hPort);
return -1;
}
if(!SetCommState(hPort,&dcb))
{
CloseHandle(hPort);
return -1;
} COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = interval;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0; if(!SetCommTimeouts(hPort,&CommTimeOuts))
{
CloseHandle(hPort);
return -1; }
m_hPort=hPort;
return 0;
解决方案 »
- 求教如何用代码实现以下乘法
- 问一个VC++ 实现位图直线运动的问题
- GetQueuedCompletionStatus怎么一直失败
- 怎样将16位(2字节)的数据转变成24位(3字节)的数据?
- .wdl类型的文件用什么能够打开
- ADO 连接带密码的ACCESS 的问题??
- VC编写的控件,在控件的OnCreate()和OnDestory()中放置了一些初始代码和释放代码,
- 我在用SOCKET作网络程序时出现以下编译错误请大家帮我看一下。谢谢!
- RUNTIMECLASS 是何东东???
- 求助:Activex 控件实现页面加载时填写对应文本框
- 高人给推荐几本好书吧
- GetVolumeInformation 得到的值不唯一
用这个语句:sprintf(sName,"\\\\.\\com%d",port);时,一个串口也打不开.
我要同时打开24个串口.我的串口是存在的.请教:是为什么?分不够再加.
sName.Format("\\\\.\\com%d",port);
hPort = CreateFile(sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);我刚试过了,可行!
hPort = CreateFile(“COMX”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
就可以了10以上就需要
hPort = CreateFile(“\\\\.\\COM10”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
sprintf(sName,"\\\\\\\\.\\\\com%d",port);
sName.Format("COM%d",port);
hcom=CreateFile("\\\\.\\"+sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,NULL);这样就可以了!
sName.Format("\\\\.\\COM%d",port);
LPCTSTR str = sName.GetBuffer(0);
hcom=CreateFile(sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,NULL);
……
sName.ReleaseBuffer();这样也行!
hcom=CreateFile(sName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,NULL);
改为:
hcom=CreateFile(str,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,NULL);
也行!是否会产生BUG,我要好好追查一下,如果着急,就用第一种方法吧!
sName.Format("\\\\.\\COM%d",port);
LPCSTR str = sName.GetBuffer(0);
hcom=CreateFile(str ,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,NULL);
……
sName.ReleaseBuffer();
能正常打开10以上的串口,我的机器上有3块MOXA卡,共26个串口,经实验均能正常打开并通信!