Подскажите, почему вылетает с Access Violation PropInfo^.Name := Value;
TBaseClass = class
protected
function GetPropCount: integer;
function GetPropName(Index: integer): shortstring;
procedure SetPropName(Index: integer; Value: shortstring);
public
property PropCount: integer read GetPropCount;
property PropName[Index: integer]: shortstring read GetPropName write SetPropName;
end;
//работает
function TBaseClass.GetPropName(Index: integer): shortstring;
var
PropInfo: PPropInfo;
PropList: PPropList;
begin
GetMem(PropList, PropCount * SizeOf(pointer));
GetPropInfos(ClassInfo, PropList);
PropInfo := PropList^[Index];
if PropInfo <> nil then Result := PropInfo^.Name else Result := '';//Здесь все нормально
FreeMem(PropList, PropCount * SizeOf(pointer));
end;
//вылетает, хотя, практически, то же самое.
procedure TBaseClass.SetPropName(Index: integer; Value: shortstring);
var
PropInfo: PPropInfo;
PropList: PPropList;
begin
GetMem(PropList, PropCount * SizeOf(pointer));
GetPropInfos(ClassInfo, PropList);
PropInfo := PropList^[Index];
if PropInfo <> nil then PropInfo^.Name := Value;//А здесь вылетает !!!!!!
FreeMem(PropList, PropCount * SizeOf(pointer));
end;
TBaseClass = class
protected
function GetPropCount: integer;
function GetPropName(Index: integer): shortstring;
procedure SetPropName(Index: integer; Value: shortstring);
public
property PropCount: integer read GetPropCount;
property PropName[Index: integer]: shortstring read GetPropName write SetPropName;
end;
//работает
function TBaseClass.GetPropName(Index: integer): shortstring;
var
PropInfo: PPropInfo;
PropList: PPropList;
begin
GetMem(PropList, PropCount * SizeOf(pointer));
GetPropInfos(ClassInfo, PropList);
PropInfo := PropList^[Index];
if PropInfo <> nil then Result := PropInfo^.Name else Result := '';//Здесь все нормально
FreeMem(PropList, PropCount * SizeOf(pointer));
end;
//вылетает, хотя, практически, то же самое.
procedure TBaseClass.SetPropName(Index: integer; Value: shortstring);
var
PropInfo: PPropInfo;
PropList: PPropList;
begin
GetMem(PropList, PropCount * SizeOf(pointer));
GetPropInfos(ClassInfo, PropList);
PropInfo := PropList^[Index];
if PropInfo <> nil then PropInfo^.Name := Value;//А здесь вылетает !!!!!!
FreeMem(PropList, PropCount * SizeOf(pointer));
end;