Announcement

Collapse
No announcement yet.

Delphi Win32 / C# Garbage-Collector

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

  • Delphi Win32 / C# Garbage-Collector

    Hallo zusammen,

    in unserer Programmkonstellation wird aus einer Delphi (Win32.exe) bzw. deren Modulen C#-Dlls verwendet. Zunehmend verwirklichen wir die Interaktion zwischen den Sprachen seitens C# über nicht registrierte COM-Objekte, für Callbackfuntionen stellen wir in Delphi triviale Interface-Objekte bereit. Bei Verwendung von Callbackfunktionen haben wir nun das Problem, das beim Aufruf des C#-Garbage-Collectors die zugehörige Delphi DLL bereits entladen wurde, d.h. eventuelle Referenzen im Garbage-Collector auf Speicherleichen verweisen. Wird der Garbage-Collector beim Schließen des Programms final geleert, so kommt je nach intensität der Programmnutzung in Delphi eine Zugriffsverletzung (Beim Debuggen in C# natürlich nicht!). Ich gehe davon aus, dass im Garbage-Collector auch Referenzen auf Delphi-Objekte gehalten werden.

    Meine Frage:
    Lassen sich Referenzen so definieren, dass diese nicht vom Garbage-Collector verwaltete werden?

    Gruß

  • #2
    Der Garbage Collector überwacht alle gemanagten Objekte und deren Lebenszeit ohne Ausnahme. Und eigentlich gibt es keinen geteilten Speicher. Zwischen gemanagten und ungemanagten Speicher wird immer kopiert (Marshalling). Insofern ist der Delphi bekannte Speicher in einem anderen Heap als der von C#.

    Wenn es zu Zugriffverletzungen kommt vermutlich wegen Codeaufrufen und nicht wegen Speicherzugriffen. Lösung wäre dann für mich eher, wenn du auf Delphi Seite etwas entlädst das noch von C# Seite aufgerufen werden könnte, diese Callbacks delphiseitig zu deregistrieren.







    Comment

    Working...
    X