![]() |
Eigene Klasse von TObjectDictonary
Guten Abend allerseits,
Ich probiere mir eine eigene Klasse von TObjectDictionary zu basteln. Das geht ja alles gut unds kompiliert auch. Wenn ich allerdings dann ein Objekt von der Klasse erzeugen möchte, ist beim "Inherited Create( s,0)" im Constructor Schluss mit Lustig. Ich krieg immer ne Fehlermeldung: Erste Gelegenheit für Exception bei $77401812. Exception-Klasse EInvalidCast mit Meldung 'Ungültige Typumwandlung'. Prozess MyProg.exe (6512)
Code:
Wenn ich "inherited Create" im Constructor ohne Parameter aufrufe funktionierts, allerdings krieg ich dann üble Speicherlecks weil die Objekte so in der Liste natürlich nicht abgeräumt werden.
type
TReportCache = class( TObjectDictionary<String,TfrxReport> ) private public function GetReportObject( const aReportName: string): TfrxReport; procedure DelReportObject( const aReportName: string); Constructor Create; end; implementation { TReportCache } constructor TReportCache.Create; var s: TDictionaryOwnerShips; begin s := [doOwnsKeys, doOwnsValues]; inherited Create( s, 0); end; Hat mir jemand einen Tipp was ich falsch mache? |
AW: Eigene Klasse von TObjectDictonary
Kannst du mal Code zeigen wie du das Objekt erstellst/benutzt?
|
AW: Eigene Klasse von TObjectDictonary
Hm, meine Vermutung ist das doOwnsKeys. Key ist bei Dir ein String. Das ist kein Objekt, welches das Dictionary freigeben darf.
Sonst wäre es ja schon noch interssant wo denn die Schutzverletzung kommt. Doch wohl nicht in dem Code den du hier zeigst. |
AW: Eigene Klasse von TObjectDictonary
Code:
var
ReportCache: TReportCache; begin ReportCache := TReportCache.Create(); end; |
AW: Eigene Klasse von TObjectDictonary
Mann mann mann, jepp, das war's. Das ich da nicht selber drauf gekommen bin.
VIELEN DANK. |
AW: Eigene Klasse von TObjectDictonary
Tipp: Soweit du keinen wirklich guten Grund hast tust dir keinen Gefallen mit der Vererbung. Nimm stattdessen ein TObjectDictionary<String,TfrxReport> und benutze es.
![]()
Delphi-Quellcode:
TReportCache = class
private var dictionary: TObjectDictionary<String, TFrxReport>; public function GetReportObject( const aReportName: string): TfrxReport; procedure DelReportObject( const aReportName: string); Constructor Create(); end; |
AW: Eigene Klasse von TObjectDictonary
Zitat:
|
AW: Eigene Klasse von TObjectDictonary
Ja, es würde reichen. Ich habe mir einfach angewöhnt in Klassendefinitionen die Variablen von den Methoden zu trennen:
Delphi-Quellcode:
TReportCache = class
private var someVariable: Integer; someOtherVariable: Integer; private procedure doStuff(); end; |
AW: Eigene Klasse von TObjectDictonary
Man braucht doch die Klasse drumherum garnicht, einfach
Code:
und dann statt dem
ReportCache := TDictionary<String,TFrxReport>.Create;
Code:
einfach
function GetReportObject( const aReportName: string): TfrxReport;
Code:
aufrufen.
ReportCache.TrygetValue(aReportName, aObj);
|
AW: Eigene Klasse von TObjectDictonary
Weil:
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 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 by Thomas Breitkreuz