Leider auch nach Neustart keine Besserung, und das Kompilat zeigt auch auf einem "echten" PC die
AV. Die Klasse ist völlig unspektakulär, da ich gerade genau am Anfang bin eine Idee umzusetzen.
Delphi-Quellcode:
TTestDrawObject = class
private
FWidth: Single;
FHeight: Single;
FTop: Single;
FLeft: Single;
procedure SetHeight(const Value: Single);
procedure SetWidth(const Value: Single);
function GetIntHeight: Integer;
function GetIntWidth: Integer;
protected
procedure Paint; virtual;
function PropText(aPropName: String; aValue: Integer): String; overload;
function PropText(aPropName: String; aValue: Single): String; overload;
function PropText(aPropName: String; aValue: String): String; overload;
function PropText(aPropName: String; aValue: TTestDrawObject): String; overload;
public
property Left: Single read FLeft write FLeft;
property Top: Single read FTop write FTop;
property Width: Single read FWidth write SetWidth;
property Height: Single read FHeight write SetHeight;
property IntWidth: Integer read GetIntWidth;
property IntHeight: Integer read GetIntHeight;
procedure SetSize(aWidth, aHeight: Single);
function ToText: String;
constructor Create;
destructor Destroy; override;
end;
Alle Getter bzw. Setter machen nichts als die Felder zurückgeben (bzw. vorher aufzurunden bei den GetInt*) oder zu setzen - da soll später mehr rein. die PropText() Methoden sind auch leere Rümpfe bis auf den letzten, welcher eben die problematische Funktion beinhaltet. Aufgerufen wird diese von "ToText" mit den Parametern (self.ClassName, self).
PropText() ist bislang auch eher wenig imposant:
Delphi-Quellcode:
function TMyDrawObject.PropText(aPropName:
String; aValue: TMyDrawObject):
String;
var
List: PPropList;
size, propCount, i: Integer;
begin
propCount := GetPropList(aValue.ClassInfo, tkAny,
nil);
size := propCount * SizeOf(Pointer);
GetMem(List, size);
propCount := GetPropList(aValue.ClassInfo, tkAny, List);
// AV nach dieser Zeile
result := '
';
end;
Das ganze soll eine kleine Serialisierung von Zeichenobjekten werden. Als Eigenbau, weil ich (viel) später mal ein paar Speziellere Dinge brauchen werde, so dass es mir wesentlich einfacher erschien diese an sich ja einfach Funktion fix selbst hinzutippern, als mich erst lange in Fremdlösungen eindenken zu müssen um sie anzupassen, und ich das Format gerne möglichst schlank halten will, weil davorn nachher einiges übers Netzwerk flitzen soll. "fix selbst hintippern" - denkste
Bin keinen Schritt weiter
Mich irritiert der Sprung in die TThreadList-Methode total. Mein Testprogramm tut aber auch nichts böses: Ein Button, ein Memo, ein TMyDrawObject wird erzeugt, und Memo1.Lines.Add(obj.ToText); aufgerufen. Ansonsten ist das ein frisches Projekt.
\\Edit: TMyDrawObject auf nur eine Property und eine nicht-überladene PropText()-Methode reduziert, komplett neues Testprojekt mit Button+Memo gemacht, und der Fehler bleibt. So langsam werd ich knüsselich
\\Edit2: Ich hab mal ein Testprojekt gebaut. Wäre prima, wenn das mal wer testen würde! Am liebsten natürlich auch mit D2007, aber auch generell würd ich's gern wissen. Ich habe mein Kompilat mit drin gelassen - wäre ja nicht unspannend, ob das auf einem anderen PC eventuell tut!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)