Einzelnen Beitrag anzeigen

silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#6

AW: (ObjectList) Sort -> AccessViolation

  Alt 7. Aug 2011, 08:51
Hallo und Danke an alle für die Antworten. Ich werde mal versuchen, zu antworten.

Zitat von MGC:
ist sichergestellt das input1 und input2 nicht auf Zeichenketten weisen die nil sind
Ich denke schon, da ich einfach das Codebeispiel zu TList.Sort aus der Onlinehilfe abgekupfert habe. Außerdem funktioniert ja eines meiner Beispiele und bei dem funktionierenden wird ja auch auf (TMMItem(input1).isAudioOnly gecastet/getestet. Dort würde es ja auch knallen, wenn input1 = nil wäre.

Zitat von jaenicke:
Die beiden Varianten machen schlicht nicht das gleiche (insbesondere im Falle von isAudioOnly = False bei beiden Objekten).
if not (b1 xor b2) then
Autsch. Das hatte ich doch tatsächlich nicht bemerkt. Peinlich, peinlich. In meiner Variante rennt er sich tatsächlich zu Tode. Jetzt, wo Du es schreibst...
Dass sie ein etwas anderes Verhalten aufweisen, ist tatsächlich so geplant gewesen, trotzdem danke, dass Du mich darauf hinweist.

Zitat von himitsu:
Ich würde auchg mal die generische TObjektList in den Raum werfen.
Normalerweise habe ich mir bisher immer meine ObjectLists passend abgeleitet type TMMItemObjectList = class(TObjectList) , sodass ich mir das Casten sparen konnte.
Das habe ich mir diesmal, warum auch immer, gespart. Das ist aber auch das erste Mal, dass ich wirklich mit etwas neuerem als TurboDelphi programmiere. Ich habe bisher überhaupt nicht an Generics gedacht, aber das ist mal eine gute Idee.

Zitat von rollstuhlfahrer:
Ich würde noch (auch wenn es noch so abstrus erscheint) folgende Abfrage einbauen:
Das habe ich an dieser Stelle nicht, weil ich es jeder Stelle, an der die OL befüllt wird, getestet habe. Es darf also kein anderer Typ in der Liste auftauchen. Generische Listen aber machen, wie erwähnt, das Ganze noch ein Stückweit sicherer. Ich denke, ich werde darauf umsteigen.

Trotzdem: Wenn ich mir die Hilfe zu TList.Sort ansehe, muss die Callback-Routine vom Type TListSortCompare sein, und der ist definiert als TListSortCompare = function (Item1, Item2: Pointer): Integer; . Somit würde mit eine typisierte OL auch nicht helfen, da die Callback Routine sich ja nicht ändert (solange ich Sort nicht überschreibe)

Zusammenfassung: Ich habe tatsächlich wieder etwas Wichtiges übersehen. jaenickes Code-Änderung behebt mein Problem, und auch generische Listen umzusteigen ist auch eine gute Idee.
Nochmals danke an Alle
Tobias
Bitte nicht hauen , ich weiß es nicht besser

Geändert von silver-moon-2000 ( 7. Aug 2011 um 08:55 Uhr)
  Mit Zitat antworten Zitat