![]() |
2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
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: ![]() ![]() ![]() 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. |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
![]() ![]() 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. |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
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:
Leider gelingt es mir nicht das vernünftig abzustellen bzw. wenn es sein muss die SSL Bibliotheken neu zu laden.
finalization
UnLoadOpenSSLLibrary; ... end. Die Host-Anwendung scheint zu denken, dass die SSL Libs weiterhin geladen sind... Ich setze XE5 ein. Vielen Dank und viele Grüße! |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
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:
Natürlich überall zuerst Unload und danach Load, da die Unload ja ebenfalls alle Load wieder plätten, wenn die Reihenfolge nicht stimmt.
UnLoadOpenSSLLibrary;
LoadOpenSSLLibrary; Und dann einen QC bei Embarcadero, bzw. eher eine Bug-Meldung an INDY. ![]() ![]() ![]() |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
Hallo,
Zitat:
Mit meinem "Hack" klappt das aber jetzt. Bei dir nicht? |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
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! |
AW: 2x LoadLibrary, 1x FreeLibrary -> Dll ist entladen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz