Hallo,
Danke schon mal für die Antwort. Hinzufügen muss ich nicht, ich will nur ein vorhandenes Attribut ändern oder ersetzen (wenn Ändern nicht geht).
Ich will das Attribut einer Property ändern:
Delphi-Quellcode:
type
TTestAttribut =
class(TCustomAttribute)
private
FValue: Boolean;
public
constructor Create(AValue: Boolean);
property Value: Boolean
read FValue
write FValue;
end;
TTest =
class
FString:
String;
public
[TTestAttribut(false)]
property Test:
String read FString
write FString;
end;
// ....
var rtti: TRttiContext;
typ: TRttiType;
Prop: TRttiProperty;
attrData: PAttrData;
oldProt: Cardinal;
begin
rtti := TRttiContext.Create;
typ :=
rtti.GetType(ClassType);
Prop := typ.GetProperty(APropName);
attrData := @prop.PropertyType.Handle^.TypeData^.AttrData;
VirtualProtect(attrData,4096,PAGE_READWRITE,oldProt);
inc(attrData,SizeOf(Word));
// TAttrData.Len überspringen
PAttrEntry(attrData)^...
// Dabei kommt nix sinnvolles raus.
end;
Das Problem ist dass in attrData, bzw. PAttrEntry(attrData)^ nichts sinnvolles drin steht.
Ich weiß aber auch nicht wo ich den Fehler mache :/
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."