|
인디를 이용한 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;
}
}
|