Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Konstruktor-Aufruf -> Zugriffsverletzung
TheEquinox - Mo 20.06.11 17:06
Titel: Konstruktor-Aufruf -> Zugriffsverletzung
Hallo zusammen,
ich hab zuletzt vor Ewigkeiten delphi programmiert und muss jetzt für ein Projekt nochmal ran (mit Delphi 7). Sehr weit komme ich allerdings nicht, schon beim Aufruf des Konstruktors meiner Klasse scheppert es.
Hier mal der Code, vielleicht sieht ja jemand etwas ungewöhnliches ...
Klassendefinition:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| type TDBConn = class
private
mSession : TOracleSession; mPackage : TOraclePackage; mLevel : Integer; mConnStr : String; mStatus : Integer; procedure Init(); procedure Login(); procedure Logout(); procedure UpdateStatus(); function IsConnected() : Boolean;
public
constructor Create(connstr : string; level : integer); Overload; constructor Create(connstr : string); Overload;
procedure MyDestroy(Sender : TObject);
end; |
Konstruktor-Implementierung :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| constructor TDBConn.Create(connstr : string; level : integer); begin inherited Create(); mConnStr := connstr; mLevel := level;
Init(); end; |
Aufruf / Instanziierung der Klasse :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var DB : TDBConn;
initialization TActiveFormFactory.Create( ComServer, TActiveFormControl, BXCT, Class_BXCT, 1, '', OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, tmApartment);
DB := TDBConn.Create('test', 1); end. |
Ich hab einen Breakpoint beim Aufruf von TDBConn.Create gesetzt und gehe dann mit F7 weiter. Er springt dann auch in den Konstruktor, allerdings knallts beim "inherits Create();" dann schon mit Zugriffsverletzung. Ich hab auch schon versucht, das inherits komplett weg zu lassen, dann knallt es mit derselben Zugriffsverletzung bei der ersten Zuweisung, also "mConnStr := connstr;"
Ich bin momentan ziemlich ratlos, wäre super wenn mir jemand auf die Sprünge helfen könnte...
Danke schonmal
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 20.06.2011 um 17:25
jaenicke - Mo 20.06.11 17:31
Dass es mit inherited nicht geht, liegt an einem bekannten Fehler in alten Delphiversionen. Mit inherited Create kommst du theoretisch zum Konstruktor von TObject, praktisch knallt es. Deshalb darfst du den Aufruf nicht machen oder musst einen anderen Vorfahren benutzen.
Warum es ohne nicht geht, weiß ich nicht. Hast du einmal das overload weggelassen und nur den einen Konstruktor einzeln getestet?
Nebenbei:
Mit Delphi XE funktioniert der Quelltext natürlich problemlos.
Und zu deinem "custom destructor": Das sieht etwas seltsam aus, bist du sicher, dass das konzeptmäßig sinnvoll ist statt einem echten Destruktor? :gruebel:
TheEquinox - Mo 20.06.11 20:34
Hallo jaenicke,
danke für die Antwort, aber ich glaube mittlerweile eher, dass es ein Problem des Debuggers ist. Wenn ich den Breakpoint erst auf den Aufruf der Init-Funktion setze, knallt es auch erst ab dort und die Anweisungen davor werden problemlos ausgeführt (auch das inherit).
Kann es vielleicht daran liegen, dass ich die Klasse TDBConn in einer Unit innerhalb eines ActiveX Projektes definiert habe ? Ich wüsste zwar nicht, was dagegen sprechen sollte aber das ist wohl das einzige, was nicht standard ist in dem bisherigen Projekt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!