Announcement

Collapse
No announcement yet.

Objekte über Dll-Grenzen übertragen - Speicher freigeben

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

  • Objekte über Dll-Grenzen übertragen - Speicher freigeben

    Hallo,

    ich schreibe gerade an eine DLL die ich in einem anderen Programm verwende. Das ganze wird mit VS2003 in C++ programmiert. Ich speichere bestimmte Daten in Klassestrukturen ab. Bspw. hat eine Klasse die 2 String elemente und besteht aber noch aus einer Liste eine anderen Klasse. Das sind verschaltet Datanstrukturen.
    Diese Strukturen möchte ich in verschiedenen Methoden als Rückgabestruktur verwenden. D.h. wenn ich aus eine anderen EXE oder DLL diese DLL verwende, erhalte ich als Ergebnis diese verschachtelte Datenstruktur. Da ich daran aber Objekt mit new erstelle bswp. in der Liste habe ich nun das Problem wie gebe ich diesen allokierten Speicher aus der anderen Anwendung wieder frei? Oder wie muss man das machen?
    Vielleicht hat ja jemand mal eine gute Idee?

    Gruß

    Rene

  • #2
    1. Trenne Impl. und Interface mit dem Bridge Pattern.
    2. Lass eine Create Funktion deine Objekte erzeugen. (In der DLL, C- Exportiert)
    3. Lass eine Destroy Funktion die Objekte wieder zerstören. (In der DLL, C- Exportiert)

    Die new und delete müssen in derselben Exe, bzw. Dll sein.
    (Die new's und delete's können sich auf unterschiedliche Heaps beziehen.)

    Alternativ zu 3. kannst Du auch eine virtuelle destroy() Funktion mit delete this machen.

    Simon

    Comment


    • #3
      So etwa wie du in 3. beschrieben hast, habe ich mir schon gedacht. Das ich bswp. in der EXE in der ich die dll und den Rückgabewert erhalte eine weitere Methode aus der EXE aufrufe, in der das Rückgabeobjekt wieder gelöscht wird. Ist zwar nicht schön da ich immer zwei Methoden aus der DLL aufrufen muss.

      Aber wie soll mir bspw. 1.helfen? Meinst du damit das ich ein Interface programmiere, bei denen immer eine Destroy-Methode enthalten ist und ich diese dann bei der Implementierung auch unbedingt implementieren muss? Oder wie meinst du das?

      Comment


      • #4
        Siehe mal hier:
        http://aegisknight.org/cppinterface.html

        Ich finde das eine gute Erklärung, ausser das überladen des delete operators würde ich mir sparen (ist auch nicht symmetrisch zu CreateXXX).

        Simon

        Comment

        Working...
        X