请在原程序上帮我改改  谢谢int port=1,baud=9600; HANDLE m_hcom;
DCB dcb; 
COMMTIMEOUTS timeouts;
char cFileName[10];

memset(cFileName,0,10);
wsprintf(cFileName,"COM%d:",port);
m_hcom = CreateFile(cFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,NULL); SetupComm(m_hcom,1024,1024);
PurgeComm(m_hcom, PURGE_TXCLEAR|PURGE_RXCLEAR);

//timeouts
    GetCommTimeouts(m_hcom,&timeouts);
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutConstant = 1000;
timeouts.ReadTotalTimeoutMultiplier = 1000;
timeouts.WriteTotalTimeoutConstant = 1000;
timeouts.WriteTotalTimeoutMultiplier = 1000;
SetCommTimeouts(m_hcom,&timeouts);

//dcb
GetCommState(m_hcom,&dcb);
dcb.BaudRate = baud;  
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT; 
SetCommState(m_hcom,&dcb); //返回错误串
DWORD dwError;
char chError[50];
memset(chError,0,50);
    bool fread=FALSE;
OVERLAPPED overlapped; 
    char buffer[1024];
memset(buffer,0,1024);
unsigned long nLength;
while(!fread)
{
if(!ReadFile(m_hcom,buffer,1024,&nLength,&overlapped))
{
dwError = GetLastError();
wsprintf(chError,"ReadFile Error:%d\n",dwError);

return 0;
}

}

解决方案 »

  1.   

    你检查一下GetLastError();得到的值就表示你的句柄出错在哪里,我看你这里是串口名字错了。没看到你写入几号串口
      

  2.   

    cFileName你是让用户INPUT吗?不是的话,你自己写入的端口号正确吗?
      

  3.   

    char cFileName[10];

    memset(cFileName,0,10);
    wsprintf(cFileName,"COM%d:",port);
    m_hcom = CreateFile(cFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,NULL);
    ///////////////////////////////////////////////////////////m_hcom = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,NULL);或者
    char cFileName[10];

    memset(cFileName,0,10);
    wsprintf(cFileName,"COM%d",port);//去掉:号
    m_hcom = CreateFile(cFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,NULL);
      

  4.   

    wsprintf(cFileName,"COM%d:",port);
    改为
    sprintf(cFileName,"COM%d:",port);还有看你的port的值是多少,是不是非法的