C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56370] [질문]com port 2자리 [시리얼 통신시]
unitas [kjlee1] 1576 읽음    2009-03-05 11:55
아래 소소와 같이 com port를 open 하고 송,수신 합니다.
com port가 1자리 면 문제없이 Open, 송, 수신 잘 됩니다.
com port가 2자리면  Open, 송신은 됩니다.
수신시 ReadFile(gethcomm(), &by, 1, &dwbytesread, 0);  이부분에서 멈춰버립니다.
제 기억에 Window 98에서는 문제없이 되나가  NT이후에서는 문제가 되서 아래 처럼 \\\\.\\를
앞에 넣어서 해결했던것 같습니다. [NT, 2000 에서는 사용했었습니다.]

Window XP에서는 처음 사용을 하는거라 당연히 \\\\.\\를 넣으면 될줄 알았는데
ReadFile 부분에서 멈추는 것은 어떤 문제일까요?
부탁드립니다.


#define CONNECTED           true
#define DISCONNECTED      false
HANDLE        m_hcomm;
void sethcomm(HANDLE hcomm)
{ m_hcomm = hcomm; }
HANDLE gethcomm()
{ return m_hcomm; }

BOOL ccomm32::opencomm(int nport, DWORD dwbrate) // com port / baudrate Open
{
    COMMTIMEOUTS    commtimeouts;
    DCB              dcb;
    AnsiString      port;

    if(nport >= 10)
        wsprintf(port.c_str(), "\\\\.\\COM%d", nport);
    else
        wsprintf(port.c_str(), "COM%d", nport);

    sethcomm(CreateFile(port.c_str(),
                      GENERIC_READ | GENERIC_WRITE,  0, NULL,
                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL));

    if(gethcomm() != INVALID_HANDLE_VALUE)
    {
        중략
         setconnected(CONNECTED);
    }
     return CONNECTED;
}
DWORD ccomm32::readcommch(BYTE &by) // 1byte씩 수신
{
    COMSTAT    comstat;
    DWORD    dwerrflgs, dwbytesread;

    if(getconnected())
    {
        ClearCommError(gethcomm(), &dwerrflgs, &comstat);
        ReadFile(gethcomm(), &by, 1, &dwbytesread, 0);
        return dwbytesread;
    }
    return 0;
}
//---------------------------------------------------------------------------
DWORD ccomm32::writecomm(const BYTE *by, int nlen) // 송신
{
    if(getconnected())
    {
        DWORD       dwbyteswritten ;
        clearcomm(RXBUFF | TXBUFF);          WriteFile(gethcomm(), (LPSTR) by, nlen, &dwbyteswritten, NULL);
        return dwbyteswritten;
    }
    return DISCONNECTED;
}
//---------------------------------------------------------------------------
void ccomm32::clearcomm(BYTE bystat)
{
   if(getconnected())
   {
        COMSTAT     comstat;
        DWORD       dwerrflgs;

        ClearCommError(gethcomm(), &dwerrflgs, &comstat);
        if(bystat & RXBUFF)
            PurgeComm(gethcomm(), PURGE_RXCLEAR | PURGE_RXABORT);
        if(bystat & TXBUFF)
            PurgeComm(gethcomm(), PURGE_TXCLEAR | PURGE_TXABORT);
     }
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
56370 [질문]com port 2자리 [시리얼 통신시] unitas 1576 2009/03/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.