여러가지 record 형태의 변수를 list형태로 추가, 삭제하는 class를 제작중입니다.
포인터를 이용하는데 제가 포인터를 잘못 이해하고 있는건지, 함수를 잘못 알고 있는건지
제가 생각했던 것과 다른 결과가 나오네요....
잘못된 부분을 알려주시면 감사하겠습니다..
호출 부분
var
LCUValue : LCUValuePacket;
i: Integer;
tmp : Pointer;
begin
for i := 0 to 10 do
begin
FillChar(LCUValue, sizeof(LCUValue), 0);
LCUValue.Channel := i;
LCUValueList.AddData(@LCUValue);
end;
for i := 0 to 10 do
begin
tmp := @LCUValue;
LCUValueList.GetData(i, tmp); //<-- 이부분에서 문제
Memo1.Lines.Add(IntToStr(LCUValue.Channel));
end;
리스트 클래스 부분
<!--CodeS-->
procedure ThList.AddData(Adata: Pointer);
begin
cs.Enter;
setlength(data, List.Count + 1);
// GetMem(data[List.Count], fSize);
data[List.Count] := GetMemory(fSize);
Move(Adata, data[List.count]^, fSize);
List.Add(data[List.count]);
cs.Leave;
end;
procedure ThList.Getdata(i: integer; var Adata);
var
k : integer;
temp , ret: Pointer;
temp2 : Pointer;
begin
cs.Enter;
if( (i >= 0) and (i < List.Count) ) then
begin
temp := @Adata;
temp2 := List.Items[i];
Move(temp2^, AData, fSize);
end;
cs.Leave;
end;
<!--CodeE-->
Move(Adata, data[List.count]^, fSize);
-->
Move(Adata^, data[List.count]^, fSize);
Move(temp2^, AData, fSize);
-->
Move(temp2^, AData^, fSize);