SetLength(MyRECArray, I);
이 부분을
SetLength(MyRECArray, I + 1);
이렇게 했어야 했는데 엉뚱한 곳에서 해매고 다녔네요.
죄송합니다.
첫눈 님이 쓰신 글 :
: 선언부입니다.
:
: Type
: TMyREC = Record
: A : String;
: B : String;
: C : String;
: End;
:
: TMyRECArray = Array Of TMyREC;
:
:
:
: 서버측입니다.
:
: procedure TFormServer.IdTCPServer1Execute(AContext: TIdContext);
: Var
: MemoryStream : TMemoryStream;
: MyRECArray: TMyRECArray;
: Begin
: SetLength(MyRECArray, 3);
:
: MyRECArray[0].A := 'A0';
: MyRECArray[0].B := 'B0';
: MyRECArray[0].C := 'C0';
:
: MyRECArray[1].A := 'A1';
: MyRECArray[1].B := 'B1';
: MyRECArray[1].C := 'C1';
:
: MyRECArray[2].A := 'A2';
: MyRECArray[2].B := 'B2';
: MyRECArray[2].C := 'C2';
:
:
: MemoryStream := TMemoryStream.Create;
: MemoryStream.Write( MyRECArray[0], SizeOf(MyRECArray[0]) );
: MemoryStream.Write( MyRECArray[1], SizeOf(MyRECArray[1]) );
: MemoryStream.Write( MyRECArray[2], SizeOf(MyRECArray[2]) );
:
: AContext.Connection.IOHandler.Write(MemoryStream);
: MemoryStream.Free;
: End;
:
:
: 다음은 클라이언트측입니다.
:
: VAR
: MemoryStream : TMemoryStream;
: MyRECArray : TMyRECArray;
: Begin
: ....
: ....
: ....
: MemoryStream := TMemoryStream.Create;
: IdTCPClient.IOHandler.ReadStream(MemoryStream);
:
: MemoryStream.Position := 0;
: I := -1;
: while MemoryStream.Position < MemoryStream.Size do
: begin
: I := I + 1;
: SetLength(MyRECArray, I);
: MemoryStream.Read( MyRECArray[I], SizeOf(MyRECArray[I]) );
: end;
:
: MemoryStream.Free;
: ....
: End;
:
: 이렇게 하면 MyRECArray가 3개의 배열로 생성되기는 하는데 값이 전부 ''입니다.
:
: 어디를 수정해야 하나요?
|