CreateFile API 가 WInXP에서 문제가 있다는 것을 본적이 있는것 같네요. WriteFile도 그럴지도 모르구요. 저는 시간두 많이 없구해서 영향을 받지 않는 라이브러리를 받아서 썼었습니다. 비교적 괜찮은 라이브러니입니다.
CPortLib 구요. 첨부시켜 놓았습니다.
kabaliero 님이 쓰신 글 :
:
:
:
:
:
:
:
안녕하세요..
:
오늘 RS-232 통신을 하다가 발생한 문제인데요.. 고수님들의 답변을
: 부탁드립니다.
:
다름이 아니라, Win98에서는 통신이 잘 되던 프로그램이 XP에서는 WriteFile 함수
: 호출부분에서 아무 응답 없이 죽어버립니다.
:
XP에서 컴파일을 해봐도 같은 문제가 발생하면서 죽어버리네요..
:
도저히 해결책을 모르겠습니다.
:
아래 소스(생성자부분과 Write File 부분) 올립니다..
: 부탁드리겠습니다.
:
__fastcall TForm1::TForm1(TComponent* Owner) :
: TForm(Owner)
{
cc.dwSize
: = sizeof(COMMCONFIG);
BuildCommDCB("9600,N,8,1",
: &cc.dcb);
:
if ((hComm = CreateFile ("COM1",
: GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL)) ==
: INVALID_HANDLE_VALUE)
{
: ShowMessage("Error opening COM port");
: return;
}
:
if (!SetCommState(hComm,
: &cc.dcb))
{
CloseHandle
: (hComm);
ShowMessage("포트 설정
: ERROR!");
return;
: }
cp.wPacketLength = sizeof(COMMPROP);
: GetCommProperties(hComm, &cp);
:
bReading =
: TRUE;
if ((hThread = CreateThread (NULL,
: 0,
(LPTHREAD_START_ROUTINE)ReadThread, NULL,0, &id))
: == INVALID_HANDLE_VALUE)
{
: ShowMessage("Error creating READ thread");
: CloseHandle (hComm);
return;
: }
}
:
========================================================================
:
int __fastcall TForm1::NetWriteString(unsigned char
: *pszString, int cbString)
{
if(TX_enable)
: {
TX_enable = 0;
: int i;
LONG lrc;
:
Tx_cnt =
: cbString;
Test_tmr = send_time;
:
for(i = 0 ; i <
: Tx_cnt ; i++)
: {
Tx_Buf[i] =
: pszString[i];
}
:
for (i = 0; i < cbString;
: i++)
: {
unsigned char Ch =
: pszString[i];
if (!WriteFile(hComm, (LPBYTE)&Ch,
: 1, (LPDWORD)&lrc, NULL))
: {
locProcessCommError(GetLastError
: ());
}
: }
TX_enable = 1;
: }
return cbString;
}
:
:
: