AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Adressen von ListItems ändern sich

Ein Thema von Wormid · begonnen am 4. Dez 2014 · letzter Beitrag vom 5. Dez 2014
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Adressen von ListItems ändern sich

  Alt 4. Dez 2014, 18:01
Welche Delphi Version war es, als es noch lief? Wenn es älter als 2009 ist, wäre ein (zugegebenermaßen sehr abstruser) Gedanke: Werden die Adressen irgendwo vielleicht mal als Strings oder PChars angesprochen? Ich wüsste keinen tollen Grund, dies je zu tun - maximal bei Kommunikation mit DLLs mit fragwürdiger API - aber man darf ja nix ausschließen. Wenn das wirklich so sein sollte, könnte die Umstellung auf Unicode eine Rolle spielen. Das ist jetzt echt sehr weit her geholt, aber das würde mir so als erste sehr grundlegende Änderung mit "Überraschungseffekt" in den letzten Jahren einfallen. (Und erklären, warum das auf euren Rechnern nicht passiert, tut es auch nicht so richtig. Aber wer weiss.)


Edit: Uwes Idee klingt besser!
"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)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 06:50
-Zu früh-

Geändert von Dejan Vu ( 5. Dez 2014 um 06:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 07:40
Das passiert nur sporadisch und nur auf dem Kundenrechner?
Habt Ihr mal externe Probleme ausgeschlossen (Hauptspeicher und Betriebssystem)?
Ja leider, das passiert nur sporadisch. (Sporadisch = Nach einigen Stunden bis Tagen, ohne bisher erkennbares Muster).
Den Kundenrechner haben wir noch nicht ausgeschlossen - das werden wir aber baldmöglichst nachholen.
(RAM testen, ggfls. ganze Maschine tauschen). Allerdings verspreche ich mir da nicht sehr viel von, der Rechner ist der Gleiche wie vor dem "Update" - und da lief es (mit der alten Version) Problemlos.

Steht OwnerData auf true? In dem Fall sollte ein Blick in die Methode TCustomListView.GetItem genügen, um zu verstehen, daß man besser keine Pointer auf TListItems speichert.
Sehr guter Hinweise, aber OwnerData ist überall auf false.

Welche Delphi Version war es, als es noch lief?
...
Werden die Adressen irgendwo vielleicht mal als Strings oder PChars angesprochen?
Vorher war es Delphi 2006.
Die üblichen Unicode-Problemchen hatte er bei der Umstellung auch, allerdings werden keine Adressen zu Strings konvertiert oder ähnliches.


Danke für die bisherigen Anregungen - bin jedoch noch offen für andere Ideen.
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
jsp

Registriert seit: 9. Aug 2003
50 Beiträge
 
#4

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 08:52
Hallo Wormid,

in solchen 'ab und zu' Fällen habe ich gute Erfahrungen mit
http://www.eurekalog.com/ gemacht.

Jörn
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 08:58
Moin Wormid,

seid ihr sicher, dass es an der Delphi-Version und nicht an der Betriebssystemversion liegt?
Immerhin wird ein ListView ja vom jeweiligen Betriebssystem zur Verfügung gestellt und ist keine generische VCL-Komponente.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 09:19
...seid ihr sicher, dass es an der Delphi-Version und nicht an der Betriebssystemversion liegt?
Die "alte" Version lief ja vorher auch auf dem gleichen Rechner beim Kunden. (*hust* War XP, ist XP).

...in solchen 'ab und zu' Fällen habe ich gute Erfahrungen mit
http://www.eurekalog.com/ gemacht.
Der Kollege vermeidet Exceptions mittlerweile, indem er die ListItems nicht mehr über die gespeicherte Referenz anspricht, sondern indem er sie jedesmal im ListView sucht, wenn er die Anzeige aktualisieren will.
Das brachte schon einiges an Verbesserung, leider aber noch nicht vollends. Und vor allem bleibt die Frage ("das Geschmäckle"), warum es auf einmal halt nicht mehr geht...
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 10:08
Die "alte" Version lief ja vorher auch auf dem gleichen Rechner beim Kunden. (*hust* War XP, ist XP).
Es kann aber auch sein, daß die alten Delphis eine alte API dieser Windows-Komponente benutzen. Beim Richedit gibt es mindestens 4 Versionen und da hat Delphi irgendwann auf eine neuere Version umgestellt, womit sich dort z.B. der Zeilenumbruch im RichEdit von #13#10 auf #13 änderte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 09:27
Also ich bin mir ziemlich sicher, das hier ein overrun-Problem besteht, d.h. es wird irgendwann irgendwo etwas überschrieben. Das íst vielleicht beim alten Delphi nicht aufgefallen, weil der Memory-Manager anders funktioniert hat, aber jetzt vielleicht.

Verwende vielleicht auch mal FastMM im FullDebugMode, schalte RangeCheck an, Overflowchecks auch usw. Du kannst ach Sentinel-Variablen einführen, oder die Referenz an anderer Stelle nochmals sichern und dann prüfen, ob die Referenzen noch identisch sind (Aber auch nur, wenn die vorherigen Maßnahmen nichts bringen)

Die ListViewItems werden vom Delphi-Control verwaltet. Über 'Items.Add' wird einfach nur ein neues TListItem instantiiert´. Das von Uwe beschriebene 'OwnerDraw'-"Problem" ist nur in "GetItem(Item : TLVItem)" vorhanden, und ob da ein Problem draus wird, würde ich bezweifeln. Denn dieses 'GetItem' hat mit dem Getter von 'Items[Index]' nichts zu tun, denn 'Items' ist eine Liste mit eigenem Getter und liefert einfach das Element an der Stelle zurück (soweit ich mich erinnere). Da auch die Liste an sich nicht verändert wird, sollte es daran eigentlich nicht liegen.
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 09:46
Das mit dem FastMM werden wir mal angehen - Danke für den Tip!
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#10

AW: Adressen von ListItems ändern sich

  Alt 5. Dez 2014, 15:02
Das von Uwe beschriebene 'OwnerDraw'-"Problem" ist nur in "GetItem(Item : TLVItem)" vorhanden, und ob da ein Problem draus wird, würde ich bezweifeln. Denn dieses 'GetItem' hat mit dem Getter von 'Items[Index]' nichts zu tun, denn 'Items' ist eine Liste mit eigenem Getter und liefert einfach das Element an der Stelle zurück (soweit ich mich erinnere).
Stimmt zumindest in neueren Delphis nicht mehr: TListItems.GetItem ruft entweder Owner.GetItem (entspricht TCustomListView.GetItem) auf oder holt sich über ListView_GetItem(Handle, Item) den Pointer auf die Instanz aus Item.lParam. Insofern ist schon das Windows-Control irgendwie in die Speicherung der ListItems involviert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:34 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