AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

Ein Thema von Tower1234 · begonnen am 16. Feb 2015 · letzter Beitrag vom 25. Feb 2015
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#1

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 16. Feb 2015, 15:33
Wann wird die DLL denn entladen? Wenn das FreeLibrary zu spät kommt, sind evtl. schon Ressourcen aus der Exe entladen, wenn die DLL entladen wird.

Gibt es in der DLL vielleicht eigene Finalization Abschnitte oder Klassendestruktoren?

Die Zugriffsverletzung mit Stacktrace, wenn du sie postest, könnte evtl. auch etwas aussagen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Tower1234

Registriert seit: 15. Feb 2013
12 Beiträge
 
#2

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 17. Feb 2015, 09:42
Das Entladen habe ich schon an verschiedenen Stellen versucht. Von direkt hinter dem LoadLibrary über die letztmögliche Programmzeile bis zum kompletten Auskommentieren.
Die Zugriffsverletzungen erscheinen (da war mein Ausgangspost nicht ganz korrekt, sorry) beim FreeLibrary oder - wenn dies auskommentiert ist - am Programmende.

Blöde Frage: Wie komme ich denn an den StackTrace?

@Uwe: Die frühe Bindung (ob delayed oder nicht) kommt leider nicht in Frage, weil man dort meinem Verständnis nach nicht den Pfad zur DLL angeben kann - was bei mir aber nötig ist.

Oder gibt es da doch eine Möglichkeit?
Das wäre sonst auch eine "elegante" Umgehung des Problems...?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 17. Feb 2015, 19:52
Die Zugriffsverletzungen erscheinen (da war mein Ausgangspost nicht ganz korrekt, sorry) beim FreeLibrary oder - wenn dies auskommentiert ist - am Programmende.
Das ist die entscheidende Information. Damit ist klar, dass es beim Deinitialisieren der DLL passiert. Ist das deine eigene DLL? Dann siehst du den Stacktrace oben links, wenn du die DLL im Debugger ausführst, sprich mit dem Programm, das diese lädt, als Hostprogramm. Delphi hält bei der Exception ja an.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Tower1234

Registriert seit: 15. Feb 2013
12 Beiträge
 
#4

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 20. Feb 2015, 14:38
So, ich habe noch etwas forschen können:

Die DLL ist von mir, aber sie (alleine) scheint es nicht zu sein.
Erstaunlicherweise tritt der Fehler auf, sobald ich eine Unit aus der Jedi Code Library einbinde!

Und es scheint egal zu sein, welche. Zumindest konnte ich es mit verschiedenen reproduzieren...
Es ist die aktuelle Version der JCL, die auch für XE6 freigegeben ist und auch sauber installiert wurde.

Ich habe mal Google gefragt, aber es scheint zumindest nichts Generelles bekannt zu sein...

Der StackTrace gibt daher übrigens leider auch wenig her - meine Unload-Routinen, aber die sind ziemlich unspektakulär.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 20. Feb 2015, 16:01
Installiere die JEDIs mal neu und nimm in den Installern der JCL und JVCL "Include Unit Versioning" heraus.

Wenn es daran liegt, sieht man das eigentlich im Stacktrace ganz einfach, weil die Schutzverletzung genau dort auftritt. Das Problem hatten wir bei DLLs auch, weshalb unsere Installationsprozedur die Entfernung dieser Häkchen vorsieht...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Tower1234

Registriert seit: 15. Feb 2013
12 Beiträge
 
#6

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 25. Feb 2015, 15:03
So, ich konnte es endlich testen und - das war's!

Vielen Dank, das Unit Versioning war tatsächlich die Ursache!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Zugriffsverletzung beim Beenden eines Programms nach LoadLibrary

  Alt 25. Feb 2015, 15:17
Jetzt würde ich aber gerne auch den detaillierten Grund verstehen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:58 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