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
[54059] 맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요.
번외편 [wifemylove] 1043 읽음    2008-07-23 18:43
아래와 같이 하면 맨처음에 Hello나 Enter user name:  또는 Enter login password: 가
들어오면 리턴을 해주는데
맨처음이 아니라 데이터를 송수신 하다가 Hello 등이 들어오면 리턴을 제대로 해주지 않는군요
제가 생각할때는 초기화가 제대로 되지 않는것 같아서 그런거 같은데..
여러곳에서 초기화를 시켜줘도 계속 그러네요..

어느부분에 이상이 있는건가요?

void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
{

        char str[500];
        unsigned char buffer=0;
        DWORD i,j;
        int k;
        char Buff[100];
        static unsigned char data[200],serial_number = 0;
        static unsigned char serial_data[500];
        String *Str_Data =new String;
        Comm1->Read(serial_data,Count);

        for(i=0;i<Count;i++)
        {
                data[serial_number] =   serial_data[i] ;

                if(memicmp(data,"Hello"sizeof("Hello") ) == 0)
                {
                        memcpy(Buff, "Hi",sizeof("\n\r"));
                        k = Comm1->Write(Buff,sizeof("Hi"));
                        memset(Buff,0,100);
                }

                else if(memicmp(data,"Enter user name: ",sizeof("Enter user name: ") ) == 0)
                {
                        Label5->Caption = "OK";
                        memcpy(Buff, "Korea\n\r",sizeof("Korea\n\r"));
                        k = Comm1->Write(Buff,sizeof("Korea\n\r"));
                        memset(Buff,0,100);
                }

                else if(memicmp(data,"Enter login password: ",sizeof("Enter login password") ) == 0)
                {
                        memcpy(Buff, "Seoul\n\r",sizeof("Seoul\n\r"));
                        k = Comm1->Write(Buff,sizeof("Seoul\n\r"));
                        memset(Buff,0,100);
                }

                if( data[serial_number] == 0x0d )
                {

                        if( (data[0] != 0x1b) && (data[1] != 0x1b) )
                        {
                        *Str_Data = (char)data[0];
                        for(j=1;j<serial_number  ;j++)
                        {
                                *Str_Data = *Str_Data + (char)(data[j]);
                        }

                        Memo1->Lines->Add(*Str_Data )  ;
                        while(Memo1->Lines->Count>50)
                        Memo1->Lines->Delete(0);
                        Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count-1);
                        Memo1->SelStart=Memo1->Text.Length()-1;

                        Memo1->SelLength=1;
                        }
                        serial_number = 0;
                }
                else
                {
                        serial_number++ ;
                }

        }
}

+ -

관련 글 리스트
54059 맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 번외편 1043 2008/07/23
54074     Re:맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 조각발 1053 2008/07/24
54077         감사합니다. 하지만... 번외편 1293 2008/07/24
54078             strcmp로는 안되겠군여 ㅎㅎ ㅠㅠ;; 데이터 크기 비교였네요 번외편 1212 2008/07/24
54061     Re:맨날 질문만 올립니다 JBMEX 929 2008/07/23
54062         제 소스를 보시면... 번외편 1047 2008/07/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.