AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
Thema durchsuchen
Ansicht
Themen-Optionen

2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

Ein Thema von hoika · begonnen am 30. Mär 2016 · letzter Beitrag vom 16. Mai 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 30. Mär 2016, 08:48
Hallo #,
besser kann ich es nicht erklären

Ich rufe in Programmteil A und B jeweils LoadLibrary auf,
mache in Programmteil B FreeLibrary und auch Programmteil A kann nicht mehr mit der Dll arbeiten:

Fehlermeldung: error creating SSL context

Das LoadLibrary/FreeLibrary mache übrigens nicht ich, sondern Indy mit den SSL-Dlls.

Beschrieben ist das u.a. hier:
https://forums.embarcadero.com/threa...62667&tstart=0
http://stackoverflow.com/questions/1...ndy-ssl-idhttp
http://atozedsoftware.newsgroups.arc...501123130.html

Im Moment behelfe ich mich mit einem Reload der Dlls,
nachdem der betreffende Code von Programmteil B gelaufen ist:

UnLoadOpenSSLLibrary;
LoadOpenSSLLibrary;

Schön ist das nicht, aber immerhin funktioniert es.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 30. Mär 2016, 11:11
MSDN-Library durchsuchenLoadLibrary und MSDN-Library durchsuchenFreeLibrary besitzen eine Referenzzählung, also das ist schonmal nicht Schuld.

Allerdings hast du Pech, da LoadOpenSSLLibrary und UnLoadOpenSSLLibrary mit einem Singleton arbeiten und genau das machen, wonach sie klingen, egal wie oft man die aufruft.



Du könntest die Indy/Delphi-Sourcen ändern und eine Referenzzählung integrieren.

Du könntest UnLoadOpenSSLLibrary hooken und die Freigabe im Betrieb überspringen.

Oder du lebst mit deinem "Hack".
Kannst maximal noch ein LoadLibrary auf die DLL machen, damit zumindestens Diese nicht ständig neu geladen werden muß, falls es damit keine Probleme gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Mär 2016 um 12:23 Uhr)
  Mit Zitat antworten Zitat
Soulflesh

Registriert seit: 24. Jul 2009
3 Beiträge
 
Delphi XE5 Professional
 
#3

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 15. Mai 2017, 23:39
Hallo zusammen,

ich bin aktuell auf ein sehr ähnliches Problem gestoßen und wollte fragen ob es hierfür eventuell eine Lösung oder einen Workaround gibt.

In meiner Anwendung lade ich dynamisch Dll's und gebe diese zur Laufzeit auch wieder frei.
Sowohl die Host-Anwendung als auch die Dll's nutzen die SSL Libs zur HTTP Kommunikation.
Sobald eine der dynamisch geladenen Dll's freigegeben wurde, funktioniert nun die SSL Geschichte nicht mehr in der Host-Anwendung: "error creating SSL context"

Im Prinzip dürfte das wohl hiervon kommen (IdSSLOpenSSL.pas):
Code:
finalization
  UnLoadOpenSSLLibrary;
  ...
end.
Leider gelingt es mir nicht das vernünftig abzustellen bzw. wenn es sein muss die SSL Bibliotheken neu zu laden.
Die Host-Anwendung scheint zu denken, dass die SSL Libs weiterhin geladen sind...

Ich setze XE5 ein.

Vielen Dank und viele Grüße!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 16. Mai 2017, 01:01
Erstmal kannst du nur das machen, was der TE auch schon macht,

also nach dem Entladen deiner DLL auch in der EXE und den anderen DLLs die SSLLib neu laden.
Erst entladen und dann wieder laden, da LoadOpenSSLLibrary in einem Boolean speichert, ob es geladen wurde und dann nichts macht, wenn der noch True ist.
Delphi-Quellcode:
UnLoadOpenSSLLibrary;
LoadOpenSSLLibrary;
Natürlich überall zuerst Unload und danach Load, da die Unload ja ebenfalls alle Load wieder plätten, wenn die Reihenfolge nicht stimmt.

Und dann einen QC bei Embarcadero, bzw. eher eine Bug-Meldung an INDY.
http://www.indyproject.org/Support.DE.aspx
https://quality.embarcadero.com (alt: http://qc.embarcadero.com)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Mai 2017 um 01:07 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 16. Mai 2017, 11:12
Hallo,

Zitat:
In meiner Anwendung lade ich dynamisch Dll's und gebe diese zur Laufzeit auch wieder frei.
Sowohl die Host-Anwendung als auch die Dll's nutzen die SSL Libs zur HTTP Kommunikation.
Sobald eine der dynamisch geladenen Dll's freigegeben wurde, funktioniert nun die SSL Geschichte nicht mehr in der Host-Anwendung: "error creating SSL context"
Das hatte mich zur fast Verzweiflung gebracht, bis ich die Ursache herausgefunden habe.
Mit meinem "Hack" klappt das aber jetzt.
Bei dir nicht?
Heiko
  Mit Zitat antworten Zitat
Soulflesh

Registriert seit: 24. Jul 2009
3 Beiträge
 
Delphi XE5 Professional
 
#6

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 16. Mai 2017, 11:15
Vielen Dank, dann werd ich das erstmal so als Workaround einbinden.
Die Issues mach ich am besten auch gleich auf.

Nochmal Danke und Grüße!
  Mit Zitat antworten Zitat
Soulflesh

Registriert seit: 24. Jul 2009
3 Beiträge
 
Delphi XE5 Professional
 
#7

AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen

  Alt 16. Mai 2017, 11:18
Zitat:
Mit meinem "Hack" klappt das aber jetzt.
Bei dir nicht?
Ich denke schon - nur ideal ist das nicht, da die SSL Libs recht lange (4s) zum laden und initialisieren benötigen...

Geändert von Soulflesh (16. Mai 2017 um 11:39 Uhr)
  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 06:24 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