|
::ReadFile(hComm, InBuff, 50 , &dwBytesRead, NULL);
에서 50(심지어 1이라고 해도)은 별 문제가 되지 않습니다. 아래와 같이 처리해 보십시오.
1. 충분히 큰 char 또는 BYTE 형 배열을 전역 변수로 밖에 만들어 둔다
(큰 배열 이름을 StrBuf라고 칭하기로 하죠 ^^;)
2. 자료를 읽는다.
3. 읽은 자료중 CR 또는 LF가 없으면 읽은 자료를 모두 StrBuf에 추가한다. 물론 복사시
StrBuf의 할당 크기를 벗어나면 안 되겠죠!
4. 읽은 자료중 CR, LF가 있으면 CR, LF 이전까지 StrBuf에 복사한다.
StrBuf를 출력한다.
StrBuf를 초기화 한다.
3번째 항부터 반복한다. 단,비교 위치는 CR, LF 다음 위치부터 검사
5. StrBuf가 꽉 찼으면 걍 출력한다.
StrBuf를 초기화 한다.
6. 통신 Port가 닫힐때 & StrBuf가 비어있지 않으면 StrBuf를 걍 출력한다. 물론 초기화도 해 주시고 ...
대충 이렇게 하심 되것 같습니다.
행복하세요. ^_^
-------------------------------------------------------
초보 님이 쓰신 글 :
: char InBuff[1024];
: void __fastcall TSerialComm::Execute()
: {
: while(1)
: {
: if(Terminated) return;
: ::ReadFile(hComm, InBuff, 50 , &dwBytesRead, NULL);
: if(dwBytesRead) {
: InBuff[dwBytesRead] = 0;
: Synchronize(ReadDataDisplay);
: }
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall TSerialComm::ReadDataDisplay()
: {
: FormMain->MemoSerial->Lines->Append(InBuff);
: }
:
: 위와 같이 시리얼로 받은 데이타를 출려하니
: 글자가 이어져 줄력됩니다..
: 전 carriage return 이나 linefeed(CR-LF)에서는
: 다음 라인으로 넘어가서 글자가 표현되게 하고 싶습니다.
: 문제는
: ::ReadFile(hComm, InBuff, 50 , &dwBytesRead, NULL);
: FormMain->MemoSerial->Lines->Append(InBuff);
: 여기서 50과 출력방법이 문제인거 같은데...
: 어떻게 하면 글자가 자연스럽게 출려되게 할 수 있을까여?
:
:
|