AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Begrenzter String, TList und InterfaceObject > Datenmüll
Thema durchsuchen
Ansicht
Themen-Optionen

Begrenzter String, TList und InterfaceObject > Datenmüll

Ein Thema von QStorm · begonnen am 9. Sep 2015 · letzter Beitrag vom 10. Sep 2015
 
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#1

Begrenzter String, TList und InterfaceObject > Datenmüll

  Alt 9. Sep 2015, 09:00
Delphi-Version: 5
Hallo,

Beim Umstieg von Delphi XE auf XE8 bin ich auf folgendes Problem gestoßen:

Vorgeschichte:
Ich verwende einen auf 10 Zeichen begrenzten String als "ID".
Diesen kann ich ohne Probleme als Typ einer TList verwenden:
Delphi-Quellcode:
type
 MyID = String[10];

// ...

var
  ID1,
  ID2 : MyID;
  Liste : TList<MyID>;
begin
  ID1 := ('ABCDEFGHIJ');
  Liste := (TList<MyID>.Create);
  Liste.Add(ID1);
  ID2 := (Liste[0]);
end;
In einem TInterfacedObject verwende ich nun TList als Member:
Delphi-Quellcode:
IMyObject<T> = interface
['{22041332-1221-4EBD-BBC5-1AF3C914E08B}']
  procedure AddValue(const Value : T);
  function GetValue(const Index : Integer) : T;
end;

TMyObject<T> = class(TInterfacedObject, IMyObject<T>)
strict private
  internalList : TList<T>;
public
  constructor Create;

  procedure AddValue(const Value : T);
  function GetValue(const Index : Integer) : T;
end;

// ...

constructor TMyObject<T>.Create;
begin
  internList := (TList<T>.Create);
end;

procedure TMyObject<T>.AddValue(const Value : T);
begin
  internList.Add(Value);
end;

function TMyObject<T>.GetValue(const Index : Integer) : T;
begin
  Result := (internList[Index]);
end;
Problem:
Wenn ich ein Objekt vom Typ IMyObject<MyID> erzeuge und via AddValue eine MyID hinzufüge entsteht Datenmüll:

Delphi-Quellcode:
var
  ID1,
  ID2 : MyID;
  MyObj1 : IMyObject<MyID>;
begin
  ID1 := ('ABCDEFGHIJ');
  MyObj1 := (TMyObject<MyID>.Create);
  MyObj1.AddValue(ID1);
  ID2 := (MyObj1.GetValue(0));
end;
Wert von ID2: 'ABC'#$90'!'#$B#2#$8D'þ'#$18
Die erste 3 Zeichen sind noch korrekt, der Rest jedoch nicht.
Es sieht so aus, als wenn er nicht genügend Speicher für den String reserviert.

MyID ist ein zentraler Bestandteil der Software.

Wodurch tritt das Problem auf und wie könnte man es lösen?

Vielen Dank im Voraus
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz