안녕하세요.
다음 예에서 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 말고 다른 방법은 없습니까?
고견부탁드립니다. 즐거운 하루되세요!~
|