Announcement

Collapse
No announcement yet.

Migration von D5 nach D7

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Migration von D5 nach D7

    Wir versuchen gerade eine Applikation von Delphi 5 nach Delphi 7 (beides Professional) zu migrieren.

    Dabei mussten wir an einigen Stellen die Unit "Variants" hinzufügen.

    Das Kompilieren ging soweit gut. Die Anwendung kann auch starten.

    Wenn wir in der Applikation an einer bestimmten Stelle einem TControl einen Parent zuweisen wollen, bricht die Anwendung mit einer EAccessViolation ab. Zugriff bei "000...001c".

    Die Applikation greift übrigens mittels ADO auf MS SQL Server 2000 zu (obwohl ich nicht glaube, dass dies mit dem Fehler zusammenhängt).

  • #2
    Hallo,

    >...TControl einen Parent zuweisen wollen.

    das wird eine unerwünschte Nebenwirkung eines Bug-Fixes sein, mit dem Borland eine seit langen herumgeisternde Macke beseitigen wollte. Der Umbauprozess ist bei Delphi 7 aber noch nicht abgeschlossen, ab Delphi 9 werden zwei zusätzliche Eigenschaften das Verhalten beim Wechsel der Parent-/Owner-Beziehung steuern

    Comment


    • #3
      Hallo,

      ja heißt das jetzt, dass wir den schwarzen Peter gezogen haben?

      Gibt es denn für das Problem evtl. einen Workaround?

      (Aber schon einmal vielen Dank für die Info! Wir haben schon mal in die Tiefen von TControl hineindebugged und konnten TControl.WinProc als den Schuldigen ausmachen. Aber hier wechselte der Debugger auf Assembler und da fehlt es dann leider. ;-)

      Aber genau an dieser Stelle, beim Verarbeiten einer Perform-Anweisung, steigt das Programm aus.

      Comment


      • #4
        Nachtrag:

        In <I>TControl.WndProc</I> wird folgendes geprüft:

        <PRE>if (csDesigning in ComponentState) then ...</PRE>

        Hier ist anscheinend <I>ComponentState</I> nicht verfügbar. Da hier versucht wird auf etwas zuzugreifen, was anscheinend nicht existiert, wird eine EAccessviolation aufgeworfen.

        Nur: <B>Warum ist <I>ComponentState</I> plötzlich nicht mehr verfügbar?</B&gt

        Comment


        • #5
          Wenn eine property nicht mehr verfügbar ist, ist normalerweise die ganze Komponente nicht mehr verfügbar. Kann es sein, dass die Komponente vorher freigegeben wurde
          Schöne Grüße, Mario

          Comment


          • #6
            Nein, dies ist auszuschließen.

            Der Aufrufstack lautet:

            TControl.SetParent<BR>
            TWinControl.WndProc<BR>
            TControl.WndProc<BR>

            Hier wird (anscheinend) geprüft, welchen <I>ComponentState</I> die Komponente hat, welche als <I>Kind</I> dem <I>Parent</I> hinzugefügt wird.

            Diese Komponente wurde gerade frisch erzeugt

            Comment

            Working...
            X