Type
TDataType = Array of Integer;
//Procedure SetArraySize(var Data:Array of Integer);
Procedure SetArraySize(var Data:TDataType);
Begin
SetLength(Data, 4);
End;
위의 소스를 참고 하세요.
델파이초보 님이 쓰신 글 :
: 안녕하세요.
:
: 다음 예에서 setlength가 안되는 이유를 모르겠네요 -_-;
:
: 1. main_call.pas 파일...
: procedure TForm1.main_callF
: var
: recA : array of REC_DATA;
: count : Integer;
: rv : Integer;
: begin
: rv := REC_test(count, recA); // func_all.pas 콜
: //
: // REC_test함수로부터 받은 recA 레코드 값을 출력....
: //
: end;
:
: 2. func_call.pas 파일
: type
: REC_DATA = record
: rec_a : Char;
: rec_b : Integer;
: end;
:
: function REC_test(var count : Integer;
: var recA : array of REC_DATA):Integer;
: var
: i : Integer;
: begin
: // DLL로부터 count 값을 받아옴
: count := C_DLL_API();
:
: // count 값만큼 recA를 증가
: SetLength(recA, count);
: // 컴파일시 Incompatiable types 라는 에러가 발생함.-_-;
: // main_callF 함수에서 SetLength(recA, 2) 라고 하면 잘 되는데 콜한 함수
: // 에서 SetLength 하게되면 타입에러가 발생...
:
: for I := 0 to count - 1 do begin
: recA[i].rec_a = C_DLL_API();
: recA[i].rec_b = C_DLL_API();
: end;
:
: REC_test := 1;
: end;
:
: Variants 타입일 경우 VararrayRedim 으로 재정의하면되지만 레코드의 경우
: Dynamic array일 경우 사이즈를 어떻게 설정할 수 있습니까?
: 콜 하기전에 미리 사이즈를 잡아서 넘기면 되지만, 사이즈를 알 수 없을 때는...
: SetLength 말고 다른 방법은 없습니까?
:
: 고견부탁드립니다. 즐거운 하루되세요!~
|