|
안녕하세요. 고수님들의 충고 부탁드립니다.
아래 소스와 같이 시리얼 통신 프로그램을 작성하여
DSP와 통신하는 프로그램입니다.그런데
win98에서는 아주 잘되었는데요, 문제는 win2000에서
해보니 프로그램에서 전송은 잘되는데 프로그램으로 받지를 못하고 있습니다.
ReadFile 부분이 문제인가요?
//-------------------------------- main.cpp
hComm = CreateFile(COMPort.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL );
// IF THE PORT CANNOT BE OPENED, BAIL OUT.
if(hComm == INVALID_HANDLE_VALUE)
{
ShowMessage("COM Port Open Error, Exit!");
Application->Terminate();
}
else
{
ComOpenSuccess=10;
COMmLED->Color=lcGreen;
Com_Ok_Message=COMPort+" Port successfully Opened...";
MainForm->StatusBarMain->Panels->Items[0]->Text=Com_Ok_Message;
}
// SET THE COMM TIMEOUTS IN OUR EXAMPLE.
GetCommTimeouts(hComm,&ctmoOld);
/*ctmoNew.ReadTotalTimeoutConstant = 100;
ctmoNew.ReadTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutConstant = 0;*/
ctmoNew.ReadIntervalTimeout = MAXDWORD;
ctmoNew.ReadTotalTimeoutConstant = MAXDWORD;
ctmoNew.ReadTotalTimeoutMultiplier = MAXDWORD;
ctmoNew.WriteTotalTimeoutMultiplier = MAXDWORD;
ctmoNew.WriteTotalTimeoutConstant = MAXDWORD;
SetCommTimeouts(hComm, &ctmoNew);
// SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
// THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
// IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
// THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
// ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hComm, &dcbCommPort);
AnsiString BuildComDCBSTRING=IntToStr(COMBps)+","+COMParity+","
+IntToStr(COMBit)+","+IntToStr(COMSTOPBit);
; // "9600,N,8,1"
BuildCommDCB(BuildComDCBSTRING.c_str(), &dcbCommPort);
SetCommState(hComm, &dcbCommPort);
// ACTIVATE THE THREAD. THE FALSE ARGUMENT SIMPLY MEANS IT HITS THE
// GROUND RUNNING RATHER THAN SUSPENDED.
ReadThread = new TRead(false);
//(2)-------------------------------- readthread.cpp의 thread에서
while(!Terminated)
{
// 데이터를 쓰는 경우의 조건식은 생략합니다
TransmitCommChar(hComm,'K');
// 데이터를 읽는 경우의 조건식은 생략합니다
ReadFile(hComm, InBuff, 1, &dwBytesRead, NULL);
if(dwBytesRead)
{
InBuff[dwBytesRead] = 0; // NULL TERMINATE THE STRING
Synchronize(DisplayIt);
}
}
|