Error creating component ... Access violation

Rund um die LCL und andere Komponenten
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Error creating component ... Access violation

Beitrag von Eclipticon »

Schoenen Abend,

komplett unerwartet und ohne, dass mir eine Aenderung daran bewusst waere, macht mir eine eigene Komponente massive Schwierigkeiten. Zunaechst habe ich zur Laufzeit Segfaults bekommen, danach habe ich sie auf dem betreffenen Formular geloescht und Ruhe war. Ich kann sie jedoch jetzt nicht mehr dem Formular hinzufuegen:

- Mit dem Orignalcode in TMyComponent.Create bekomme ich zwei Fehlermeldungen: "Error creating component TMyComponent. Access violation." und "Error destroying component of type TMyComponent in unit : Access violation.". Danach schmiert Lazarus ab.

- Mit einem leergeraeumten TMyComponent.Create (nur inherited Create) bekomme ich die Fehlermeldung "Error moving component MyComponent1:TMyComponent" ... und zwar nicht nur, wenn ich versuche, diese Komponente hinzuzufuegen, sondern auch in ganz anderen Forms.

Irgendwelche Tips, wie ich damit weiter vorgehe? Alle unnoetigen Files habe ich schon beseitigt, die IDE auch schon zigmal neu gebaut ...

Danke :-)

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Error creating component ... Access violation

Beitrag von Eclipticon »

Mittlerweile ist es mir gelungen, die Sache mit einer zur Laufzeit erzeugten Komponente und dem Debugger etwas einzugrenzen. TMyComponent = class(TCustomStringGrid).

Der Segfault wird hier ausgeloest

Code: Alles auswählen

Columns.Clear;
  with TGridColumn(Columns.Add) do // <----- Columns.Add!!
  begin
    ButtonStyle := cbsNone;
    ReadOnly := True;
  end;
Verfolgen kann ich das Problem bis

Code: Alles auswählen

// Grids.pas
function TGridColumns.Add: TGridColumn;
begin
  result := TGridColumn( inherited add );
end;
Warum zur Hoelle funktioniert die Add-Methode ploetzlich nicht mehr? Kann sich das irgendjemand erklaeren?

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Error creating component ... Access violation

Beitrag von Eclipticon »

Und ich sehe gerade, dass die Unit, in der TMyComponent deklariert und definiert ist, doppelt erzeugt wird (ein mal beim Compilieren des Packages und ein mal von F9) ... kann das die Ursache des Problems sein?

Was fuer einen Grund gaebe es eigentlich, dass das Programm nochmal die Unit aus dem Package compiliert? Compilerflags? Abhaengigkeiten?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Error creating component ... Access violation

Beitrag von Christian »

Das passiert z.b. wenn du an den Unitpfaden rumpielst oder die Unit im Package und im Projekt hast o.ä.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Error creating component ... Access violation

Beitrag von Eclipticon »

Nur zur Dokumentation: Diese Sache liess sich auf meine Ereignisbehandlungsroutine von OnSelectCell zurueckfuehren, die zu einem offenbar zu fruehen Zeitpunkt inherited SelectCell aufgerufen hat. Weiss der Teufel ;-)

Antworten