Announcement

Collapse
No announcement yet.

DLL und Zugriff auf TCanvas und TPen

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

  • DLL und Zugriff auf TCanvas und TPen

    Hallo zusammen,

    in einem einfachen Zeichenprogramm habe ich die Zeichenmethoden der einzelnen Objekte in eine DLL ausgelagert. Ich übergebe dabei der von der DLL exportierten Methode u.A. das TCanvas-Objekt meiner internen Bitmap, auf das gezeichnet werden soll.
    Das funktioniert eigentlich ganz prima.

    ABER:Sobald ich innerhalb der DLL eine Eigenschaft des TPen-Objekts meiner Canvas ändere (Pen.Color:=clYellow), tritt beim Verlassen der DLL-Methode eine Zugriffsverletzung auf.

    Weil ich mir nicht anders zu helfen wusste, erzeuge ich nun innerhalb der Methode meines Zeichenobjekts, in der die DLL-Methode aufgerufen wird, eine lokale TPen-Instanz, die ich nicht wieder freigebe. Dann funktioniert alles.
    Baue ich ein, dass diese TPen-Instanz freigegeben wird, kommt es zu denselben Problemen.

    Warum kann ich auf das der DLL übergebene TCanvas-Objekt zugreifen, nicht jedoch auf das zugehörige TPen-Objekt.

    Weiß jemand Rat?
    Viele Grüße,
    Axel

  • #2
    Hast Du auch den Memory-Manager eingebaut?

    Lebende Delphi-Objekte zwischen Exe und DLL auszutauschen ist ein gefährliches Spiel:

    - Funktioniert nur wenn Exe und DLL mit der gleichen Delphi-Version mit gleichen Patch-Level kompiliert wurden (vermutlich auch gleiche Compiler-Schalter nötig)

    - Memory-Manager muß vermutlich auch eingebunden sein

    Comment


    • #3
      Hallo Bernhard,

      vielen Dank für die Antwort.

      ich habe jetzt gerade mal ShareMem mit eingebunden und auch EXE und DLL mit der gleichen Delphi-Version (D7) übersetzt.
      Leider tritt noch das gleiche Problem auf.

      Ist denn die Übergabe bereits erzeugter Objekte an eine DLL grundsätzlich problematisch und wenn ja, warum ist das so?

      Gruß,
      Axe

      Comment


      • #4
        Du machst dir einige Vorteile zunichte die DLL's haben: Unabhängig von Exe-Version, Verwendbar in anderen Systemen, ...
        Auch gibt es diverse Probleme, da das Application-Objekt der Exe ein anderes ist als das der DLL

        Warum verwendest Du keine Packages? Da du eh Delphi-Version-gebunden bist sind doch Packages sinnvoller als einfache DLL's

        Comment


        • #5
          Hallo Bernhard,

          ich denke, ich versuch's mal mit Packages.

          Vielen Dank für die Hilfe,
          Axe

          Comment

          Working...
          X