|
도와주세요~~~
아래 코드는 제가 제작한 여러 단말기들 제어 및 테스트 프로그램에 넣어 쓰던 시리얼 통신관련
코드입니다. 한데 아래 코드를 이용해서 WIN98에서는 지금껏 아무이상없이 잘 동작하던것이
WIN2000 에서는 컴 포트가 전혀 열리질 않는군요. 어디가 잘못되었는지 WIN2000과 어떤 점에서
어긋난는지 자세한 설명 부탁 드립니다. 여러 문서들 참조를 해봤는데 잘 해결이 안되네요
bool PortOpen(char nPort,char nBaud,char nDataBit,char nStopBit,char nParityBit)
{
DCB dcb;
char szPort[10];
HANDLE hThread;
PortClose();
sprintf(szPort, "COM%d", nPort);
hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL );
if(hComm == INVALID_HANDLE_VALUE) return false;
if(!GetCommState(hComm, &dcb))
{
CloseHandle(hComm);
return false;
}else
{
old_dcb = dcb;
}
FillMemory(&dcb, sizeof(dcb), 0);
dcb.DCBlength = sizeof(dcb);
switch(nBaud)
{
case B2400: dcb.BaudRate = CBR_2400; break;
case B4800: dcb.BaudRate = CBR_4800; break;
case B9600: dcb.BaudRate = CBR_9600; break;
case B19200:dcb.BaudRate = CBR_19200; break;
}
//ShowMessage(dcb.BaudRate);
switch(nDataBit)
{
case DATA_B7: dcb.ByteSize = 7; break;
case DATA_B8: dcb.ByteSize = 8; break;
}
//ShowMessage(dcb.ByteSize);
// dcb.Parity = NOPARITY;
switch(nStopBit)
{
case STOP_B1: dcb.StopBits = 0; break;
case STOP_B2: dcb.StopBits = 2; break;
}
//ShowMessage(dcb.StopBits);
switch(nParityBit)
{
case ODD_P: dcb.Parity = 1;break;//PARITY_ODD; break;
case EVEN_P: dcb.Parity = 2;break;//PARITY_EVEN; break;
case NONE_P: dcb.Parity = 0;break;//PARITY_NONE; break;
}
if(!SetCommState(hComm, &dcb))
{
CloseHandle(hComm);
return false;
}
PurgeComm(hComm, PURGE_FLAGS);
SetupComm(hComm, RXSIZE, TXSIZE);
/*
Reading=1;
if((CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CommReadThread,NULL,0,&id))
==INVALID_HANDLE_VALUE)
{
ShowMessage(" ERROR Creating COMM_READ thread");
return false;
}
*/
PortReset();
return true;
}
//---------------------------------------------------------------------------
void PortClose(void)
{
Reading=0;
SetCommState(hComm, &old_dcb);
PurgeComm(hComm, PURGE_FLAGS);
CloseHandle(hComm);
CloseHandle(hThread);
// CloseHandle(AnalForm->haThread);
}
//---------------------------------------------------------------------------
void PortReset(void)
{
EscapeCommFunction(hComm, CLRRTS);
EscapeCommFunction(hComm, CLRDTR);
// Delay(100);
EscapeCommFunction(hComm, SETRTS);
EscapeCommFunction(hComm, SETDTR);
// Delay(500);
}
|