Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.611 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: GetPropList weigert sich

  Alt 10. Jan 2012, 11:39
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!
Angehängte Dateien
Dateityp: zip GetPropList.zip (222,1 KB, 5x aufgerufen)
"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)

Geändert von Medium (10. Jan 2012 um 12:03 Uhr)
  Mit Zitat antworten Zitat