Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

GetPropValue und ArrayOf...

  Alt 1. Jun 2006, 18:52
Hallo,

ich habe ein kleines Problem (oder ein Brett vorm Kopf).
Gegeben ist folgender Konstrukt:
Delphi-Quellcode:

...

type
  ArrayOfString = array of String;

  TBlaBla = class(irgenetwas)
  private
    FQArray : ArrayOfString;
    FSonst : String;
  public
    destructor Destroy; override;
  published
    property Sonst : String read FSonst write FSonst;
    property QArray : ArrayOfString read FQArray write FQArray;
  end;

  ArrayOfBlaBla = Array of TBlaBla;

  TBlaObject = class(irgenetwas)
  private
    FAlleQArrays : ArrayOfBlaBla;
    FDieses : String;
  public
    destructor Destroy; override;
  published
    property Dieses : String read FDieses write FDieses;
    property AlleQArrays : ArrayOfBlaBla read FAlleQArrays write FAlleQArrays;
  end;

...
Ich muss nun zur Laufzeit die Properties von TBlaObject auslesen, was ja auch
eigentlich kein Problem ist:

Delphi-Quellcode:

...

type
  // Dient zum Zwischenspeichern
  TEntry = class
    Name : String;
    Typ : TVarType;
    Value : Variant;
    List : TObjectList;
  end;

function GetObjectData(AObject : TObject; var List : TObjectList) : Boolean;

implementation

function GetObjectData(AObject : TObject; var List : TObjectList) : Boolean;
var
  PropList : pPropList;
  I, J, K : Integer;
  PropValue : Variant;
  Entry : TEntry;
begin
  PropList := AllocMem(SizeOf(PropList^));
  try
    I := 0;
    J := GetPropList(AObject, PropList);
    if (J <> 0) and (PropList^[I] <> nil) then
    begin
      while (I < J) do
      begin
        Entry := TEntry.Create;
        Entry.Name := PropList^[i].Name;
        try
          PropValue := GetPropValue(AObject, PropList^[i].Name); // Fehler bei ArrayOf
          Entry.Value := PropValue; // Edit
          Entry.SoapTyp := TVarData(PropValue).VType;
        except
        end;
        Inc(I); // Edit
      end;
    end;
  finally
    FreeMem(PropList);
  end;
  Result := List.Count - 1 > -1;
end;

...
Das klappt soweit, bis, ja bis das ArrayOfBlaBla dran ist.
Dann steigt GetPropValue mit einer Exception aus:
EVariantTypCastError := 'Ungültige Variant-Typumwandlung'

Hat jemand dafür einen Tipp oder eine Lösung?

Gruß
Alter Mann
  Mit Zitat antworten Zitat