Einzelnen Beitrag anzeigen

I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#7

Re: Nicht erkärliche EAccessVoilation

  Alt 26. Feb 2009, 12:16
Hallo!

Zitat von SirThornberry:
Könntest du bitte die vollständige Fehlermeldung posten? (Sorry falls ich es übersehen habe)
Denn die vollständige Meldung enthält Adressen die bei der Suche nach der Ursache mehr als hilfreich sind.
Kann ich selbstverständlich.

Hier die Fehlermeldung:

//FInputMask := TCR_DB_Editor.Create(self);
FInputMask := TDBInputMask.Create(self);

Modul laden: ntshrui.dll. Ohne Debug-Infos. Basisadresse: $76940000. Prozess desktopdd.exe (1544)
Modul laden: ATL.DLL. Ohne Debug-Infos. Basisadresse: $76AD0000. Prozess desktopdd.exe (1544)
Modul laden: NETAPI32.dll. Ohne Debug-Infos. Basisadresse: $71BA0000. Prozess desktopdd.exe (1544)
Thread-Start: Thread-ID: 1640. Prozess desktopdd.exe (1544)
Thread-Start: Thread-ID: 1636. Prozess desktopdd.exe (1544)
Modul laden: SHDOCVW.dll. Ohne Debug-Infos. Basisadresse: $71000000. Prozess desktopdd.exe (1544)
Erste Gelegenheit für Exception bei $77E4D756. Exception-Klasse EAbstractError mit Meldung 'Abstrakter Fehler'. Prozess desktopdd.exe (1544)


Und hier die Meldungen, wenn ich die Fremdbibliothek verwende:

FInputMask := TCR_DB_Editor.Create(self);
//FInputMask := TDBInputMask.Create(self);


Modul laden: SETUPAPI.dll. Ohne Debug-Infos. Basisadresse: $76620000. Prozess desktopdd.exe (400)
Modul laden: ntshrui.dll. Ohne Debug-Infos. Basisadresse: $76940000. Prozess desktopdd.exe (400)
Modul laden: ATL.DLL. Ohne Debug-Infos. Basisadresse: $76AD0000. Prozess desktopdd.exe (400)
Modul laden: NETAPI32.dll. Ohne Debug-Infos. Basisadresse: $71BA0000. Prozess desktopdd.exe (400)
Thread-Start: Thread-ID: 404. Prozess desktopdd.exe (400)
Thread-Start: Thread-ID: 1740. Prozess desktopdd.exe (400)
Thread-Start: Thread-ID: 428. Prozess desktopdd.exe (400)
Modul laden: SHDOCVW.dll. Ohne Debug-Infos. Basisadresse: $71000000. Prozess desktopdd.exe (400)
Thread-Start: Thread-ID: 956. Prozess desktopdd.exe (400)
Erste Gelegenheit für Exception bei $77E4D756. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004D1A93 in Modul 'desktopdd.exe'. Lesen von Adresse 00000030'. Prozess desktopdd.exe (400)

Die Klasse TCR_DB_Editor ist die Klasse der fremden Eingabemaske.

Die Klasse TDBInputmask ist meine eigene Eingabemaske.

Wenn ich hier:
Delphi-Quellcode:
function TCR_DB_Editor.GetRealParent : TWinControl;
var MYDBCtrlGrid : TMYDBCtrlGrid;
     tmp :TWinControl;
     Flag : boolean;
begin
     Flag := false;
     tmp := self.Parent;
     result := tmp;
     //showmessage(result.Name);
     while (tmp <> nil) AND ( tmp.Parent <> nil ) AND (Flag =false) do
     begin
         if Pos('dbctrl', lowercase(tmp.ClassName )) > 0 then
         begin ...
die zusätzliche Bedingung (tmp <> nil) einbaue, erhalte ich eine EInvalidOperation

@nuclearping
Zitat von nuclearping:
Wenn FDataLink nil ist, krachts auch bei der Zuweisung der DataSource. Egal ob "value" nil ist. Genauso wenn Self.Parent nil ist. Dann kannst du nicht auf Self.Parent.Parent zugreifen (tmp.Parent).
Er hat wohl doch Recht damit. Aber nun erhalte ich die EInvalidoperation, wenn auch an ganz anderer Stelle, die mir zunächst auch nicht einleuchten will. Fehlersuche ist doch eine Herausforderung.

Modul laden: ntshrui.dll. Ohne Debug-Infos. Basisadresse: $76940000. Prozess desktopdd.exe (1760)
Modul laden: ATL.DLL. Ohne Debug-Infos. Basisadresse: $76AD0000. Prozess desktopdd.exe (1760)
Modul laden: NETAPI32.dll. Ohne Debug-Infos. Basisadresse: $71BA0000. Prozess desktopdd.exe (1760)
Thread-Start: Thread-ID: 1640. Prozess desktopdd.exe (1760)
Thread-Start: Thread-ID: 1636. Prozess desktopdd.exe (1760)
Thread-Start: Thread-ID: 1500. Prozess desktopdd.exe (1760)
Modul laden: SHDOCVW.dll. Ohne Debug-Infos. Basisadresse: $71000000. Prozess desktopdd.exe (1760)
Thread-Start: Thread-ID: 1532. Prozess desktopdd.exe (1760)
Erste Gelegenheit für Exception bei $77E4D756. Exception-Klasse EInvalidOperation mit Meldung 'Element '' hat kein übergeordnetes Fenster'. Prozess desktopdd.exe (1760)

...und zwar hier:

if HorzScrollBar <> nil then HorzScrollbar.Position := 0; in dieser Methode:

Delphi-Quellcode:
procedure TCR_DB_Editor.ReOrderControls;
... Variablendeklaratioenen
begin

   //Initialisierungen, die nichts mit den Schrollbars zu tun haben

   //Das steht unmittelbar vor der strittigen Anweisung
   
   ww := Width div (2 * FElement_ListCols) ;
   if ww < FMinWidthHoriz then ww := FMinWidthHoriz;

   
   VertikalRowCounter := 0;

   //Hier tritt die Exception auf < EInvalidOperation
   //Wozu braucht der Scrollbar ein übergeordnetes Fenster,
   //um dessen Anfangsposition zuzuweisen?
   if HorzScrollBar <> nil then HorzScrollBar.Position := 0;
   if VertScrollBar <> nil then VertScrollBar.Position := 0;
end;
Nun werde ich noch mal meine eigene Eingabemaske auf Fehler "abklopfen".
  Mit Zitat antworten Zitat