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
[25392] 델파이 소스를 C++로...(Indy Telnet 프로그램)
통일바라기 [] 2099 읽음    2003-04-28 20:15
인디를 이용한 Telnet 데모 프로그램을 C++로 변환하려고 합니다.
그런데, 초보실력으로는 도무지 모르겠습니다.

파스칼 문법을 찾아가며 변환시킨다고 했는데도 뭔가 빠진것 같아서,
고수님들의 도움을 요청하고자 합니다.

실행하고서, 서버 연결을 요청하면 에러가 나고

    char& __fastcall operator [](const int idx)
    {
*      ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
      Unique();                 // Ensure we're not ref-counted
      return Data[idx-1];
    }
위의 * 표시된 부분에서 에러가 난다고 나옵니다.

추정하건대, Buffer 데이터를 Memo1에 뿌려주면서 에러가 발생한듯 싶기는 합니다....



< 델파이 소스>

procedure TfrmTelnetDemo.IdTelnetDemoDataAvailable(Buffer: String);

const
    CR = #13;
    LF = #10;
var
    Start, Stop : Integer;

begin
  if Memo1.Lines.Count = 0 then
      Memo1.Lines.Add('');

  Start := 1;
  Stop  := Pos(CR, Buffer);
  if Stop = 0 then
      Stop := Length(Buffer) + 1;
  while Start <= Length(Buffer) do begin
      Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
          Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
          Copy(Buffer, Start, Stop - Start);
      if Buffer[Stop] = CR then begin
          Memo1.Lines.Add('');
          SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1);
      end;
      Start := Stop + 1;
      if Start > Length(Buffer) then
          Break;
      if Buffer[Start] = LF then
         Start := Start + 1;
      Stop := Start;
      while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
          Stop := Stop + 1;
  end;
end;


<C++ 빌더로 변환시켜본 소스>
void __fastcall TForm1::IdTelnet1DataAvailable(AnsiString Buffer)
{
   const CR = 13;
   const LF = 10;
   int Start, Stop;

   if(Memo1->Lines->Count==0)
      Memo1->Lines->Add("");
   Start = 1;
   Stop = Buffer.Pos(CR);
   if (Stop == 0)
      Stop = Buffer.Length() + 1;

   while (Start <= Buffer.Length()) {
      Memo1->Lines->Strings[Memo1->Lines->Count -1] =
         Memo1->Lines->Strings[Memo1->Lines->Count -1] + Buffer.SubString(Start, Stop-Start);

      if (Buffer[Stop] == CR) {
         Memo1->Lines->Add("");
         SendMessage(Memo1->Handle, WM_KEYDOWN, VK_UP,1);
         // 이함수는 뭔지 모르겠는데, 추정해보면 Memo1으로 제어권을 넘긴다는 말인지...
      }

      Start = Stop +1;
      if (Start > Buffer.Length())
         break;

      if (Buffer[Start] == LF) {
         Start = Start +1;
         Stop = Start;
      }
      while ((Buffer[Stop] != CR) && Stop <= Buffer.Length())
         Stop = Stop +1;
   }
}


+ -

관련 글 리스트
25392 델파이 소스를 C++로...(Indy Telnet 프로그램) 통일바라기 2099 2003/04/28
25406     [답변] 변환 오류 + 엑세스 에러....잡아서 올립니다. 정성훈.해미 971 2003/04/29
25485         Re:[답변] 변환 오류 + 엑세스 에러....잡아서 올립니다. 통일바라기 1278 2003/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.