Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Access Violation beim hinzufügen einer neuen TDirecotory

  Alt 11. Okt 2013, 16:39
Und jetzt erstellst du AList schon im Constructor?



SetDeviceName setzt "Name", aber nicht "DeviceName".
Ist das so gewollt?

Seh ich das richtig, oder gibt es da wirklich eine globale Variable mit dem Namen "Name"?

Wer gibt die erzeugten TDictionary-Instanzen eigentlich wieder frei?
Da wäre es bestimmt besser, wenn du eine TObjectList nimmst, statt der TList. Und Dieser sagst, daß sie die freigeben soll. (OwnsObjects=True)

Ach ja, man glaubt garnicht, was man an "mehrfachen" Aufrufen einsparen kann.
Delphi-Quellcode:
procedure TDevices.AddAccessories(Name, Description, Price, OType: string);
var
  i: Integer;
begin
  i := AList.Add(TDictionary<string, string>.Create);
  AList[i].Add('name', Name);
  AList[i].Add('description', Description);
  AList[i].Add('price', Price);
  AList[i].Add('type', OType);
end;

procedure TDevices.AddAccessories(Name, Description, Price, OType: string);
var
  i: Integer;
begin
  //i := AList.Add(TDictionary<string, string>.Create);
  //AList[i].Items['name'] := Name;
  //AList[i].Items['description'] := Description;
  //AList[i].Items['price'] := Price;
  //AList[i].Items['type'] := OType;

  i := AList.Add(TDictionary<string, string>.Create);
  AList[i]['name'] := Name;
  AList[i]['description'] := Description;
  AList[i]['price'] := Price;
  AList[i]['type'] := OType;
end;

procedure TDevices.AddAccessories(AName, ADescription, APrice, AType: string);
var
  i: Integer;
begin
  with AList[AList.Add(TDictionary<string, string>.Create)] do
  begin
    Items['name'] := AName;
    Items['description'] := ADescription;
    Items['price'] := APrice;
    Items['type'] := AType;
  end;
end;
PS: TObjectDictionary<string,xxx> statt TObjectList<xxx>, wobei der String dann den DeviceName enthält (zusätzlich zum DeviceName in xxx), dann kannst du auch noch die Devices recht schnell in der Liste suchen lassen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Okt 2013 um 16:49 Uhr)
  Mit Zitat antworten Zitat