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
[38748] Re:Re:[질문]소스 한번 봐 주실래요. (포트번호는 안오는것 같거든요)
보거스 [kjlee1] 1452 읽음    2005-01-13 14:22
// .cpp file
// port open
BOOL ccomm32::opencomm(int nport, DWORD dwbrate)
{
    COMMTIMEOUTS    commtimeouts;
    DCB       dcb;
    char      port[5];

    if(getconnected())
        closecomm();

       wsprintf(port, "COM%d", nport);
       sethcomm(CreateFile(port, GENERIC_READ | GENERIC_WRITE,
                        0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  NULL));

    if(gethcomm() != INVALID_HANDLE_VALUE)
    {
           SetCommMask(gethcomm(), EV_RXCHAR);
           SetupComm(gethcomm(), RXQUEUE, TXQUEUE);
           PurgeComm(gethcomm(), PURGE_TXABORT | PURGE_RXABORT |
           PURGE_TXCLEAR | PURGE_RXCLEAR);

          dcb.DCBlength = sizeof( DCB );
          GetCommState(gethcomm(), &dcb);
          dcb.BaudRate = dwbrate;

          dcb.ByteSize = 8;
          dcb.Parity   = NOPARITY;
          dcb.StopBits = ONESTOPBIT;

          if(!SetCommState(gethcomm(), &dcb))
         {
    closecomm();
    return false;
         }

         commtimeouts.ReadIntervalTimeout        = MAXDWORD;
         commtimeouts.ReadTotalTimeoutMultiplier    = 0;
         commtimeouts.ReadTotalTimeoutConstant   = 0;
         commtimeouts.WriteTotalTimeoutMultiplier= 0;
         commtimeouts.WriteTotalTimeoutConstant  = 0;
         SetCommTimeouts(gethcomm(), &commtimeouts);

         setconnected(true);
   }
   else
   {
    ShowMessage((AnsiString)port + " 통신포트 오류");
    return false;
   }

   return true;
}
//---------------------------------------------------------------------------
// data 수신부                                         
DWORD ccomm32::readcomm(BYTE *by, int nlen)
{
      if(getconnected())
      {
             COMSTAT    comstat;
             DWORD    dwerrflgs, dwbytesread;

             ClearCommError(gethcomm(), &dwerrflgs, &comstat);
             dwbytesread = min(nlen, RXQUEUE);
             if(dwbytesread > 0)
             {
                   // Debug로 따라가 보니까 gethcomm()은 값이 00000378 로 오는데요.
       ReadFile(gethcomm(), by, dwbytesread, &dwbytesread, NULL);
       return dwbytesread;
             }
      }
      return DISCONNECTED;
}
//---------------------------------------------------------------------------



// 헤더 file 부분
class ccomm32: public ccrc16
{
private :
     BOOL        m_bconnected;
     HANDLE   m_hcomm;
     BYTE       m_str[4096];
     String      m_tmpc;

public :
     ccomm32();
    ~ccomm32();

    void sethcomm(HANDLE hcomm)
    { m_hcomm = hcomm; }
    HANDLE gethcomm()
    { return m_hcomm; }

    void setconnected(BOOL hconnected)
    { m_bconnected = hconnected; }
    BOOL getconnected()
    { return m_bconnected; }

   B OOL opencomm(int nport, DWORD dwbrate);
   BOOL closecomm();

   DWORD readcomm(BYTE *by, int nlen);
   DWORD readcommch(BYTE &by);

   DWORD writecomm(const BYTE *by, int nlen);
   void clearcomm(BYTE bystat);

   void asctohex(const BYTE *by, const WORD wlen, BYTE *byrtn);
   void hextoasc(const BYTE *by, const WORD wlen, BYTE *byrtn);
};
//---------------------------------------------------------------------------


답변 감사드리구요.  죄송하지만  복잡하더라도 봐주십시요.

말씀하신 ReadFile의 첫번째 인자 (제 소스에서는 gethcomm()) Debug로 따라가 보면 00000378 로
값이 오거든요.
제소스에 문제가 있는건지요?

정상적으로 포트는 open되고  데이타도 잘 들어와요.
(pc의 포트 2개 (com1, com2)를 rs -232로 test 했거든요.)

근데 멀티포트로 통신했을때 어느 포트에서 데이타가 들어왔는지가 그게 문제거든요.

다시 한번 부탁드립니다.


WARSHIP 님이 쓰신 글 :
: 윈도우환경이시라면.
:
: 포트를 여실때
: CreateFile 을 사용하시면 그때 핸들을 가지고 있지 않나요?
: 그리고 ReadFile로 데이타를 받는다면 그 인수로 포트의 핸들을 넣어주어야 할텐데요?
:
: 200개를 연다고 해서 하나의 핸들로 컨트롤하는것이 아니기때문에
: ReadFile(hPort,~~) 했다는 것은 hPort로 들어왔다는걸 아는거 아닌가요? ^^;
:
: 제가 질문의 요지를 잘 이해하지 못한거 같기도 하구요. ^^;

+ -

관련 글 리스트
38744 [질문]포트확인? 보거스 1516 2005/01/13
38746     Re:[질문]포트확인? WARSHIP 1152 2005/01/13
38748         Re:Re:[질문]소스 한번 봐 주실래요. (포트번호는 안오는것 같거든요) 보거스 1452 2005/01/13
38757             Re:Re:Re:[질문]소스 한번 봐 주실래요. (포트번호는 안오는것 같거든요) WARSHIP 1026 2005/01/14
38760                 Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. 보거스 1014 2005/01/14
38762                     Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. WARSHIP 974 2005/01/14
38764                         Re:Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. 보거스 1037 2005/01/14
38767                             Re:Re:Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. WARSHIP 981 2005/01/14
38768                                 Re:Re:Re:Re:Re:Re:Re:Re:[감사]정말 많이 도움되었습니다. 보거스 1053 2005/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.