http://blog.daum.net/uandshe_23/10227986
DWORD BaudRate;
switch (baud) {
case 110 : BaudRate = CBR_110; break;
case 300 : BaudRate = CBR_300 ; break;
case 600 : BaudRate = CBR_600 ; break;
case 1200 : BaudRate = CBR_1200; break;
case 2400 : BaudRate = CBR_2400; break;
case 4800 : BaudRate = CBR_4800; break;
case 9600 : BaudRate = CBR_9600; break;
case 14400 : BaudRate = CBR_14400; break;
case 19200 : BaudRate = CBR_19200; break;
case 38400 : BaudRate = CBR_38400; break;
case 56000 : BaudRate = CBR_56000; break;
case 57600 : BaudRate = CBR_57600; break;
case 115200 : BaudRate = CBR_115200; break;
case 128000 : BaudRate = CBR_128000; break;
case 256000 : BaudRate = CBR_256000; break;
}
CString strPort;
strPort.Format("COM%d", nPort);
m_hComm = CreateFile(strPort, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (m_hComm == INVALID_HANDLE_VALUE) // if(m_hComm == (HANDLE) - 1)
return FALSE;
...이런 식으로 사용하란다!
예제)
SetInit(char PortName[], DWORD xBaud, int StopBit , int ByteSize)
{
m_osRead.offset = 0; //OVERLAPPED m_osRead,m_osWrite;
m_osRead.offsetHigh = 0;
if(!(m_osRead.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL)))
return FALSE;
DWORD dwBaud = 0;
switch(xBaud)
{
case 1: dwBaud = CBR_1200; break;
........(생략)
}
//Com port open
m_hCom = CreateFile(PortName, GENERIC_READ | GENERIC_WRITE, 0
,NULL ,OPEN_EXISTING
,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED
,NULL);
if(m_hCom == (HANDLE) - 1) return FALSE;
//Com port EVENT Setting
SetCommMask(m_hCom, EV_RXCHAR);
//통신 버퍼 초기화
SetupComm(m_hCom,4096, 4096);
//Timeout 설정
COMMTIMEOUTS CommTimeOuts commtimeouts;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF; //문자읽기 사이의 최대 시간
CommTimeOuts.ReadTotalTimeoutMultiplier = 0; //문자의 증가자
CommTimeOuts.ReadTotalTimeoutConstant = 0; //밀리초 단위의 상수
CommTimeOuts.WriteTotalTimeoutMultiplier = 100; //문자의 증가자
CommTimeOuts.WriteTotalTimeoutConstant = 0 ; //밀리초 단위의 상수
SetCommTimeouts (hComm, &CommTimeOuts);
}