AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische DLL

Ein Thema von ATS3788 · begonnen am 4. Feb 2011 · letzter Beitrag vom 5. Feb 2011
Antwort Antwort
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

Dynamische DLL

  Alt 4. Feb 2011, 17:55
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

Stream.CopyFrom(PicStream, PicStream.Size) ;

Problem siehe Pascal Tag und das auch nicht immer, manchmal geht es.
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Dynamische DLL

  Alt 4. Feb 2011, 18:06
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dynamische DLL

  Alt 4. Feb 2011, 19:36
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.


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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Dynamische DLL

  Alt 4. Feb 2011, 23:53
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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Dynamische DLL

  Alt 5. Feb 2011, 00:41
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#6

AW: Dynamische DLL

  Alt 5. Feb 2011, 03:52
Danke dachte ich mir schon das dies was
mit der Speicherverwaltung zu tun hat
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: Dynamische DLL

  Alt 5. Feb 2011, 15:57
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 ...

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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:29 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