AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObject, DLL, DLL Freigabe

Ein Thema von haentschman · begonnen am 14. Mär 2014 · letzter Beitrag vom 14. Mär 2014
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#11

AW: TObject, DLL, DLL Freigabe

  Alt 14. Mär 2014, 14:55
Jupp, bei Klassen mußt du auf BPLs wechseln.

Wennn du Interfaces nutzt und nicht willst, daß die DLL vor Freigabe des Interfaces freigegeben wird, dann könntest du in dem Objekt eine eigene Instanz der DLL holen.
Im Contructor ein MSDN-Library durchsuchenLoadLibrary.

Aber beim Freigeben gibt es ein "kleines" Problemchen, denn da müsstest du jetzt das FreeLibrary innerhalb der DLL aufrufen (im Destructor) aber dann würdest du ja den Coderücksprungpunkt löschen, auf den das MSDN-Library durchsuchenFreeLibrary zurück will, womit es dann kannlt, bevor die DLL komplett verlassen wurde.
Man kann da aber einen Thread starten, welcher etwas verzögert die DLL und sich frei gibt. MSDN-Library durchsuchenFreeLibraryAndExitThread (aber kein RTL-Thread, sondern nur eine "einfache" Thread-Prozedur, denn sonst bleiben eventuell Speicherlecks zurück ode es knallt dennoch, falls die DLL/RTL sich den Thread merkt und freigeben will, wenn sie freigegeben wird)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#12

AW: TObject, DLL, DLL Freigabe

  Alt 14. Mär 2014, 15:08
Nachfrage:

Ich hätte noch als Übergabeparameter zur DLL eine generische TObjectList. (hallo DLL, mach mal die Liste voll) Wie gehe ich damit um? Da die Objekte nun zu Interfaces geworden sind geht ja nur TList. Die Interfaces werden dann in der DLL erzeugt und in die Liste gelegt.

Welche Probleme erwarten mich?

Zitat:
Wennn du Interfaces nutzt und nicht willst, daß die DLL vor Freigabe des Interfaces freigegeben wird
...die Frage ist doch, was passiert mit dem Inhalt des Interfaces bzw. der Liste mit den Interfaces beim Entladen der DLL? Bleibt das erhalten?

Geändert von haentschman (14. Mär 2014 um 15:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#13

AW: TObject, DLL, DLL Freigabe

  Alt 14. Mär 2014, 16:24
Zitat:
Wennn du Interfaces nutzt und nicht willst, daß die DLL vor Freigabe des Interfaces freigegeben wird
...die Frage ist doch, was passiert mit dem Inhalt des Interfaces bzw. der Liste mit den Interfaces beim Entladen der DLL? Bleibt das erhalten?
Das Interface geht "kaputt".

Der Speicher in der Liste wird vom Speichermanager der DLL freigegeben
und der Code, auf welchen die Funktionen des Interfaces zeigen ist weg da er ja in der DLL war.



Man könnte zwar absichtlich den Speichermanager zerschießen, damit er die "Speicherlecks" beim Beenden nicht freigibt,
oder man baut seine TList so, daß sie den Speicher z.B. direkt bei Windows holt und nicht über den Speichermanager geht,
oder man sorgt dafür, daß der Speichermanager nicht genutzt wird und stattdessen der Speichermanager der EXE verwendet wird (SharedMM),
aber es fehlt dann immernich der Code (alle Methoden, die man in dem Interface aufrufen kann), welcher die Liste verwaltet.

Die Liste müsste also in der EXE erstellt werden und alle Strings/Inhalte, dürfen nicht im Speichermanager der DLL liegen.
> Kein String, sondern nur WideString darf im Interface verwendet werden und auch sonst nichts, was im Speichermanader der DLL landen könnte.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: TObject, DLL, DLL Freigabe

  Alt 14. Mär 2014, 16:33
Ich hätte noch als Übergabeparameter zur DLL eine generische TObjectList. (hallo DLL, mach mal die Liste voll) Wie gehe ich damit um? Da die Objekte nun zu Interfaces geworden sind geht ja nur TList.
Würde ich so nicht sagen...
Ich habe dafür eine IInterfacedList<IMyObject> selbst geschrieben basierend auf der TList<IMyObject>.

...die Frage ist doch, was passiert mit dem Inhalt des Interfaces bzw. der Liste mit den Interfaces beim Entladen der DLL? Bleibt das erhalten?
Das ist ja schon beantwortet, daher nur noch ein Hinweis:
Eine Möglichkeit wäre ein Factory-Interface, das du aus deinem Programm mitgibst und die Objekte erstellt. Die DLL muss diese dann nur über die Interfaces füllen und in die Liste hängen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#15

AW: TObject, DLL, DLL Freigabe

  Alt 14. Mär 2014, 16:38
Gut...
Dann ist es klar. Die DLL hat dann den gleichen Lebenszyklus zu haben wie die Klasse welche die Objekte / Interfaces / Listen hält. Das bedeutet ein klein wenig Umbau.

Danke.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz