EAccessViolat. bei Funktion-Verlassen [gelöst]
-
Das Erzeugen der Form sollte so aussehen.
TFormRTCfg *FrmRTCfg= new TFormRTCfg(0); // 0 bedeutet, kein Owner
Kolumbus schrieb:
Verstehe ich nicht... Ich muss doch einen Eigentümer angeben!?
Nein, musst du nicht. Der Eigentümer ist für das Löschen der Form zuständig. Das übernimmst du aber selbst. Also brauchst du keinen.
-
Mehr Aufgaben hat der Eigentümer in diesem Fall nicht? Nicht, dass andere Funktionalitäten auch nicht mehr gegeben sind wenn ich keinen Eigentümer angebe?
Zum eigentlichen Problem: Ich habe ein neues Formular erstellt und vom alten Formular nur die Komponenten kopiert -> Zugriffsverletzung ist noch da!
Da hat doch der Teufel seine Finger im Spiel!
-
Kannst Du dieses Testprojekt irgendwo hochladen?
-
Also irgendwie wird scheinbar eine Adresse nicht richtig angegeben. Wenn ich mit Breakpoint auf
ListBox1->Items->Add(TmpStr)
im Konstruktor stehe und F7 drücke, sieht es direkt danach im Builder so aus -> Link.
@Joe_M: Ich könnte es als e-mail senden! ok?
-
[EDIT] Mailadresse entfernt...
-
Ok, ist raus...
-
Ist angekommen. BCB 3... Ich hoffe, da kann ich was mit anfangen, da hat sich doch etliches geändert, seit dem 3er.
-
Ja, ist schon komisch läuft bei mir (nachdem es automatisch auf Version 6 aktualisiert wurde) problemlos.
Zwei Dinge musste ich ändern.
Die Datei EingabeSerNr ist nicht dabei gewesen, also habe ich alle Referenzen darauf auskommentiert. Aber da der Fehler nicht in dieser Datei passiert, kann man das wohl getrost ignorieren.
Die Zeile:GrpIdx= 0, UseLstLen= 0, ComboBoxGroups->ItemIndex= 0;
Musste ich ändern in:
GrpIdx= 0; UseLstLen= 0; ComboBoxGroups->ItemIndex= 0;
Ansonsten lässt sich das Projekt nicht compilieren, mit der Fehlermeldung:
Erzeugen[C++ Fehler] EACfg.cpp(51): E2492 Zuweisung von Eigenschaften nur mit einfachen Anweisungen wie \\\042prop = value;\\\042
Teste diese Änderung bitte mal bei Dir.
-
Danke dass du mal drüber geschaut hast!
Joe_M. schrieb:
Die Datei EingabeSerNr ist nicht dabei gewesen, also habe ich alle Referenzen darauf auskommentiert. Aber da der Fehler nicht in dieser Datei passiert, kann man das wohl getrost ignorieren.
Oh, da hab ich wohl was übersehen... einfach in Main.cpp das #include "EingabeSerNr.h" ändern in #include "EingabeNr.h".
Joe_M. schrieb:
Die Zeile:
GrpIdx= 0, UseLstLen= 0, ComboBoxGroups->ItemIndex= 0;
Musste ich ändern in:
GrpIdx= 0; UseLstLen= 0; ComboBoxGroups->ItemIndex= 0;
Ansonsten lässt sich das Projekt nicht compilieren, mit der Fehlermeldung:
Erzeugen[C++ Fehler] EACfg.cpp(51): E2492 Zuweisung von Eigenschaften nur mit einfachen Anweisungen wie \\\042prop = value;\\\042
Teste diese Änderung bitte mal bei Dir.
Ich habe die Änderung gemacht und bekomme immernoch eine Zugriffsverletzung.
Nun, es bleibt mir wohl nichts Anderes übrig, als das Formular wirklich nochmal Komponente für Komponente, Ereignis-Methode für Ereignis-Methode neu zu erstellen. Immerhin kann ich den Inhalt der Methoden kopieren + einfügen, sofern ich die Komponenten-Namen ordentlich übernehme...
PS: Wo du das Testprojekt schonmal da hast: Ist das Projekt sonst vom Aufbau und Quelltext vertretbar?
-
Ich weiß nicht, ob ein Neuaufbau des Formulars hilft. So weit ich das gelesen habe, hat sich mit der Einführung des BCB 4 einiges geändert, unter anderem auch der Zeitpunkt zu dem ein Konstruktor aufgerufen wird. Ich hatte aber niemals den BCB 3...
Kolumbus schrieb:
Wo du das Testprojekt schonmal da hast: Ist das Projekt sonst vom Aufbau und Quelltext vertretbar?
Kann ich nichts zu sagen, so genau hab ich mir den Code nicht angesehen.
Positiv ist mir aufgefallen, dass Du recht ausführlich kommentierst.
Negativ sind mir ein paar Dinge bei der Codeformatierung aufgefallen. zB schreibst Du einige Schleifen und if-Anweisungen komplett in eine Zeile. Respektive schreibst Du mehrere Anweisungen in eine Zeile.Beispiel:
if(UseLstLen>0) { BtnDel->Enabled= true; BtnClr->Enabled= true; }
sähe bei mir so aus:
if(UseLstLen > 0) { BtnDel->Enabled= true; BtnClr->Enabled= true; }
Finde ich persönlich einfacher zu lesen. Ist aber wohl Gewohnheits- / Geschackssache.
-
Joe_M. schrieb:
Ich weiß nicht, ob ein Neuaufbau des Formulars hilft. So weit ich das gelesen habe, hat sich mit der Einführung des BCB 4 einiges geändert, unter anderem auch der Zeitpunkt zu dem ein Konstruktor aufgerufen wird. Ich hatte aber niemals den BCB 3...
Ich hoffe doch, dass der Neubau was bringt - den bekomme ich heute fertig. Es steht ja immernoch der Fakt, dass das Formular unter identischen Bedingungen in einem anderen Projekt funktioniert. Dort habe ich das Formular ursprünglich erstellt. Dann habe ich das Formular nur noch kopiert und in ein neues Projekt eingefügt. Im Orginal-Projekt funktioniert das Formular, im neuen Projekt nicht... Daher hoffe ich jetzt, dass beim Kopieren ein Fehler entstanden ist, der nach dem Neubau nicht vorhanden ist!
Ich poste nachher, ob der Neubau funktioniert.
-
Ich habe nun den Neubau des Formulars abgeschlossen -> ZugriffsFehler ist nach wie vor vorhanden!
Ich würde jetzt gern den Smilie einfügen, der sich den Kopf an einer Mauer blutig schlägt... wo ist der?
Ich bin echt am Ende... kA wie ich jetzt weitermachen soll... Folgende Kleinigkeiten hab ich noch versucht:
Die Schleife zum Füllen der Liste aus dem Konstruktor in eine Button-Klick-Methode verschoben und den Funktionsaufruf in der Schleife durch die Anweisungen der Funktion ersetzt (dh. kein Funktionsaufruf mehr):
void __fastcall TFormNewEACfg::Button1Click(TObject *Sender) { for(int Idx=0; Idx<18; Idx++) { Eintrag= Wert[0][Idx]; Eintrag.Delete(Eintrag.LastDelimiter("~"),2); this->LstBxGet->Items->Add(Eintrag); // ZugriffsFehler !!! } }
Nach wie Vor erhalte ich den Zugriffsfehler!
Ich weiß nicht weiter...
Edit: Hat nicht jemand noch einen BCB3 installiert, um den Fehler eventuell nachzuvollziehen?
-
Lösung siehe hier