Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
ich habe mir mein Projekt irgendwie total vermurkst. Ich habe ein Package mit
allenm möglichen Komponenten erzeugt, die ich für eine OpenGL-Anwendung
benötige. Irgendwann fing das System an, bei Beendigung eine EAccessViolation
auszuwerfen. Ich habe mir dann FastMM4 (alternativer Memory manager) besorgt
und bin auch allen vergessenen Speicherbelgungen auf die Schliche gekommen
und habe diese beseitigt. FastMM4 sagt mir jetzt, dass der Speicher beim Beendigen
des Programms ok ist.
Leider habe ich jetzt ein anderes Problem. Wenn ich dem OpenGL-Formular eine beliebige
Standardkomponente hinzufüge und versiche das Formular zu speichern bzw. das
Projekt zuz kompiliern bekomme ich immer eine Fehlermeldung mit
can´t read adress 0000 mit Hinweis auf das Package.
Das deutet auf einen nicht initialisierten Zeiger in deinem Package hin.
Am besten, du probierst mal, die entsprechende Komponente nicht über den Formulardesigner zuzufügen, sondern im FormCreate manuell zu erstellen.
Dann kannst Du dort debuggen, das geht nämlich beim automatischen Erstellen aus dem .dfm file nicht wirklich.
(btw. diese Vorgehensweise wird auch von Borland in der Hilfe zum Erstellen neuer Entwurfzeitkomponenten empfohlen).
Ich hatte mal ein ähniches Problem und konnte meine Form nur durch entfernen der Komponente aus dem .dfm file reparieren, da ist Delphi regelrecht abgeschmiert, als ich F9 gedrückt hab. Ist also nicht ganz unkritisch, das Herumgefummle mit eigenen Komponenten
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Danke, der Tipp hat geholfen. Durch ein benutzen der Komponente über Create und nciht über die Implementation im Formular sind die Fehler behoben. Ich habe zwar keine Pointerprobleme fiunden können aber die Initialisierungsreihenfolge ist jetzt sichergestellt und dadurch sind alle Probleme beseitigt.
Der Trick ist der, dass Delphi beim Erzeigen des Formulars, die Komponenten nach der Reihenfolge erstellt, in der sie im dfm stehen, und zwar mit ALLEN vermerkten Property einstellungen (immer eine komponente nach der anderen). Im normalfall haut das ja auch hin, aber manchmal gibts da Probleme.
In meinem Fall wars eine Indexproperty, die den Index einer Spalte in einem selbstgebauten Grid angab. Grid und spalten sind jeweils eigene Komponenten, die aber sehr eng verheiratet sind.
Wenn man nun den Spaltenindex änderte passierte solane nix, wie genug Spalten schon da waren (z.B.: neuer Index: 5 gesamtzahl 10). Beim Laden aus dem dfm hatte er aber erst eine spaltenkomponente erzeugt (-> Spaltenindex: 5 Spaltenzahl: 1) und das führte zum Fehler (zugriff hinter Listenende in meinem Fall)
Der auslöser war also, dass ich über den Designer den Spaltenindex der ersten definierten Spalte auf 5 gesetzt habe. Hätte ich den Spaltenindex der 6. definierten Spalte auf 5 gesetzt wäre garnix passiert.
Dein Pointerproblem kann also durchaus an der Erstellungsreihenfolge im dfm liegen. Wenn das Setzen einer Property der einen Komponente das Vorhandensein der anderen vorraussetzt kommt es zu solchen Fehlern.
Abhilfe schafft entweder die Komponenten in der richtigen Reihenfolge auf das Formular zu ziehen (oder per copy+paste im dfm die reihenfolge ändern) oder beim setzten der Propertys prüfen, ob alle Vorraussetztungen erfüllt sind (If Assigned()) und wenn nicht ggf. Notfallstrategien entwickeln
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.