Hallo,
Diese Warnung hatte ich nicht
(Weiss ich recht genau, da ich mit einem Kompilat idR erst zufrieden bin, wenn 0 Fehler, 0 Warnungen und 0 Hinweise nach Erstellen da stehen.)
Aber als du es mit published probiert hast, muss es eine Warnung gegeben haben. Ansonsten sehr löblich.
Ich habe noch mal mein Rad2007 angeworfen und ein Test-Programm geschrieben. Beim Schreiben ist mir dann auch noch ein Fehler in deinem Code aufgefallen. In der Zeile
for i := 0 to propCount do
fehlt das
-1
.
Folgender Sourcecode steht zur Diskussion.
Delphi-Quellcode:
program RttiProject1;
{$APPTYPE CONSOLE}
uses
Classes,
TypInfo;
type
//{$M+} // Variante 1
TTest= class//(TPersistent) // Variante 2
strict private
fTest: Integer;
published
property Test: Integer read fTest write fTest;
end;
//{$M-}
var
Obj: TTest;
List: PPropList;
Count, I: Integer;
begin
Obj:= TTest.Create;
try
Count := GetPropList(Obj, List);
for I := 0 to Count- 1 do
Writeln(List[I].Name);
finally
Obj.Free;
end;
Writeln('Press Enter');
Readln;
end.
Wenn man den so kompiliert, mit dem Auskommentierten, gibt es folgende Warnung:
Code:
[DCC Warnung] RttiProject1.dpr(14): W1055 PUBLISHED verursachte, dass
RTTI ($M+) zu Typ 'TTest' hinzugefügt wurde
Man sollte sich den Text auch mal durch lesen. Denn eigentlich ist das genau das was du willst. Trotzdem funktioniert das Programm nicht wie gewollt. Es bleibt bei
GetPropList
hängen (Nach 10 Sekunden hatte ich keine Lust mehr zu warten). Erst wenn man Variante 1 oder 2 ein kommentiert geht es wie gewollt. Wenn man ohne Variante 1 und 2 auf das published verzichtet hängt es auch. Wer lügt da nun. Die Warnung oder die Funktion. Ich Tippe auf den Compiler, der hat immer Schuld.
Einbeliebigername.