Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynamische DLL (https://www.delphipraxis.net/158085-dynamische-dll.html)

ATS3788 4. Feb 2011 16:55

Dynamische DLL
 
Wie ist das nun mit der Freigabe des Handles bei
LoadLibrary muss man das freigeben.
Habe bei Assarbad gelesen dass dies auch windows erledigt.

Als ich die Dll Statisch eingebunden hatte ich keine
Probleme
mit der dynamischen Einbindung habe ich ein EAccessViolation

Delphi-Quellcode:
Stream.CopyFrom(PicStream, PicStream.Size)
;

Problem siehe Pascal Tag und das auch nicht immer, manchmal geht es.

SirThornberry 4. Feb 2011 17:06

AW: Dynamische DLL
 
Man muss nichts freigeben. Wenn der Prozess beendet wird, werden auch die von ihm belegten Ressourcen frei gegeben.
Aber meiner Meinung nach sollte man alles was man selbst anfordert auch selbst wieder freigeben. Dadurch kann man unter anderem sicher stellen das auch alles in der richtigen Reihenfolge frei gegeben wird. Und wenn dein Projekt mal in ein anderes Projekt als Objekt eingebettet wird, dann machst du dich ganz und gar nicht beliebt wenn bei Freigabe deines Projektobjektes die dazugehörigen Ressourcen weiter belegt bleiben nur weil du der Meinung warst das es doch genügt wenn diese bei Programmende automatisch frei gegeben werden.

[Edit]
Was dein StückQuelltext mit deiner eigentlichen DLL-Frage zu tun hat kann ich irgendwie nicht erkennen. In dem Stück Quelltext ist rein gar nichts zu sehen was auf die Arbeit mit DLLs schließen lässt.

himitsu 4. Feb 2011 18:36

AW: Dynamische DLL
 
MSDN-Library durchsuchenLoadLibrary ... freigeben mit MSDN-Library durchsuchenFreeLibrary

OK, Windows gibt bei Programmende sowas frei, aber ...
(TObject).Create, GetMem und Co. könnte man dann auch einfach "vergessen" freizugeben ... schließlich wird das auch mit von Windows freigegeben, wenn das Programm beendet wird. :angle:


Ansonsten: Was sind denn das für Streams? (also die Klassentypen)

TStream und seine Nachfahren sind ja Objekte und diese kann man nicht einfach so zwischen DLL und EXE hin-und herreichen.
Aber zu diesem Thema gibt es ja schon genügend Threads, siehe Hier im Forum suchenShareMem und Co.

Assarbad 4. Feb 2011 22:53

AW: Dynamische DLL
 
Zitat:

Zitat von SirThornberry (Beitrag 1079593)
Aber meiner Meinung nach sollte man alles was man selbst anfordert auch selbst wieder freigeben. Dadurch kann man unter anderem sicher stellen das auch alles in der richtigen Reihenfolge frei gegeben wird.

Dem kann ich nur beipflichten.

Darf man annehmen, daß der Stream eine Ressource einbindet? Ansonsten müßtest du noch etwas an Details nachreichen.

Aphton 4. Feb 2011 23:41

AW: Dynamische DLL
 
War es nicht so, dass LoadLibrary intern einen Referenzzähler inkrementiert, per FreeLibrary dekrementiert und falls der Zähler = 0, die DLL entladen wird?!
Aufjedenfall sollte man sich selber darum kümmern!
Genauso wie man das bei Klasseninstanzen mit Free auch immer macht!

ATS3788 5. Feb 2011 02:52

AW: Dynamische DLL
 
Danke dachte ich mir schon das dies was
mit der Speicherverwaltung zu tun hat

Assarbad 5. Feb 2011 14:57

AW: Dynamische DLL
 
Zitat:

Zitat von Aphton (Beitrag 1079639)
War es nicht so, dass LoadLibrary intern einen Referenzzähler inkrementiert, per FreeLibrary dekrementiert und falls der Zähler = 0, die DLL entladen wird?!

Korrekt. Wobei da im KM noch ein wenig mehr abgeht. Der Referenzzähler ist auf das Handle welches wir als HMODULE usw. zu sehen bekommen ...

Zitat:

Zitat von ATS3788 (Beitrag 1079646)
Danke dachte ich mir schon das dies was
mit der Speicherverwaltung zu tun hat

Hast du vielleicht nen Profiler? Wenn Delphi die Debuginfos von WinDbg unterstützen würde (PDB), gäbe es noch jede Menge andere Möglichkeiten. Ist leider nur nicht der Fall.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 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