call by addres 로 부른 동적배열을 setlength 할 때 에러가 발생합니다.
어떻게 해야되죠????....맨날맨날 질문만 올리는군요 -_-;;
3일똥안끙긍데도.해결못했습니다..벌써..쁘로젝트기한음.넘기고흑흑..제발좀.
첫번째 소쓰 setlength를 이용한방법(델파이동적배열이용)
procedure TLogProcess.MessageReport(var AnalRecord : Array of TAnalRecord; var MsgMaxnum : Integer; MsgFlag : Boolean; Kind : Integer);
var
j : integer;
begin
MsgFlag := False;
For j:=0 to MsgMaxNum-1 do
begin
if AnalRecord[j].Subject = LogProcess.LogRecord.reson then
begin
MsgFlag := True;
break;
end;
end;
if MsgFlag = True then
inc(AnalRecord[j].Sendnum, 1) //!!!!!!!!여기여기에러에러
else
begin
SetLength(AnalRecord, MsgMaxNum+1);
AnalRecord[MsgMaxNum].Subject := LogProcess.LogRecord.reson;
AnalRecord[MsgMaxNum].Sendnum := 1;
inc(MsgMaxNum,1);
end;
end;
두번째 소쓰 reallocmem를 이용한방법(옛날에쓰던방법)
이거는 되기는 되는데요....점점갈수록..쫌(아니엄청시리) 느려짐미다..
아마..리엘록멤이라는놈에...엘록멤할때마다.배열 전체.메모리를..다시쓰는것같은데.
따른방법없나요??
type
TAnalRecord = record // email host별 리포르를 위한 자료형
subject : ShortString; // email또는 host이름
Sendnum : Integer; // 받은수
Recnum : Integer; // 보낸수
end;
AAnalRecord = Array[0..0] of TAnalRecord;
PAnalRecord = ^AAnalRecord;
procedure TLogProcess.MessageReport(var AnalRecord : PAnalRecord; var MsgMaxnum : Integer; MsgFlag : Boolean);
var
j : integer;
begin
{ Report41 }
MsgFlag := False;
For j:=0 to MsgMaxNum-1 do
begin
if AnalRecord[j].Subject = LogProcess.LogRecord.reson then
begin
MsgFlag := True;
break;
end;
end;
if MsgFlag = True then
inc(AnalRecord[j].Sendnum, 1)
else
begin
ReallocMem(AnalRecord, (MsgMaxNum+1)*Sizeof(TAnalRecord));
AnalRecord[MsgMaxNum].Subject := LogProcess.LogRecord.reson;
AnalRecord[MsgMaxNum].Sendnum := 1;
inc(MsgMaxNum,1);
end;
end;