Hallo,
gegeben Delphi 11.2 und die kostenlose FastReports Edition.
Ich habe eine Klasse zum Report erzeugen (die ein Interface umsetzt und daher immer
per Interface Referenz benutzt wird). Diese Klasse bekommt per Konstruktor mehrere
Interface Referenzen übergeben.
Das OnGetValue Event von FastReport ist in dieser Report Generator Klasse umgesetzt
um aus diesen übergebenen Interface Referenzen dynamisch auszugebende Informationen
zu beschaffen.
Das jeweils benutzte Report Objekt ist statisch auf einem Datenmodul und es wird
zur Laufzeit eine entsprechende .fr3 Datei rein geladen.
Jetzt habe ich einen reproduzierbaren Fall, wo irgendwie in dieser Report Erzeugungsklasse
die Interfacereferenz kaputt gehen muss. Ich verstehe aber noch nicht wie.
Der Fall ist vom Ablauf wie folgt:
1. Es wird im Konstruktor einer Logikklasse eine Interfacereferenz der Report
Erzeugungsklasse erzeugt "R1" und die später kaputt scheinende Interface Referenz "A",
die später Daten liefern soll übergeben.
2. Es wird in einer anderen Methode eine neue Interfacereferenz der Report
Erzeugungsklasse erzeugt "R2" und eine andere Interface Referenz "B" statt "A" übergeben,
da ggf. andere Datenwerte geliefert werden sollen. "B" ist auch in der Methode erzeugt.
3. Mittels "R2" wird erfolgreich ein Report ausgegeben. Die Aufrufende Methode mit den
lokalen Referenzen R2 und B wird verlassen.
4. Es wird versucht über "R1" einen Report auszugeben. In den Methoden vor dem
Report.PrepareReport(true); Aufruf ist der Referenzzähler von "B" auf 3.
5. In der OnGetValue Methode, die durch Report.PrepareReport(true); aufgerufen wird ist
"B" irgendwie total kaputt. Assigned ist noch true, der Versuch im Debugger RefCount
anzuzeigen (habe das im Interface rausgeführt) schlägt mit einer Zugriffsverletzung
"Unknown
exception 4E3D0E80 at 0148FF84" fehl.
6. Der Versuch mal alle Debugging Optionen von FastMM4 "Vollversion" einzuschalten hat
auch nichts gebracht.
Wie kann diese Interface Referenz kaputt gehen? Das Programm macht da nix paralell...