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
[22337] 시리얼과 WIN2000
김용수 [y016skim] 860 읽음    2002-10-30 10:37
안녕하세요. 고수님들의 충고 부탁드립니다.
아래 소스와 같이 시리얼 통신 프로그램을 작성하여
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);
          }
}

+ -

관련 글 리스트
22337 시리얼과 WIN2000 김용수 860 2002/10/30
31033     Re:시리얼과 WIN2000 국진(Ghost) 808 2002/10/30
23085     Re:시리얼과 WIN2000 심호용 863 2002/12/07
23102         Re:Re:시리얼과 WIN2000 김용수 823 2002/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.