Announcement

Collapse
No announcement yet.

DLL mit Thread sorgt für GPf

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL mit Thread sorgt für GPf

    Folgende Anwendung:
    1. Dll wird dynamisch geladen.
    2. Initalisierungsfunktion aus der DLL wird aufgerufen.
    3. Funktion zur Verbindung zu einer DatenBank wird aufgerufen (A).
    4. Funktion zum Beenden der DB-Verbindung wird aufgerufen(B).
    5. Zugriffsfehler tritt auf.

    Nun zu dem Problem:
    Der Punkt 3 erzeugt in der DLL anscheinend einen Thread.<br>
    Wird jetzt im Debugger ein Breakpoint <b>auf</b> die Funktion (B) gesetzt, und danach alles mit 'Gesammte Routine' abgearbeitet, funktioniert alles. Der DLL-Thread ist nach der Rückkehr korrekt beendet.<br>
    Setzt man den Breakpoint auch nur eine Assembler-Anweisung hinter die Funktion (B), so sind a) noch beide Threads(der aus der DLL und der meiner Anwendung) da, und b) stürzt die Anwendung mit dem nächsten Einzelschritt im CPU-Fenster ab.<br>
    Als Ursache konnte ich herausfinden, das der DLL-Thread anscheinend auf einer Systemfunktion wartete, und nach dem Beenden der Funktion in den aufrufenden Thread zurückspringen will, aber den Programmcode des Threads nicht mehr findet.<br>
    Nun Meine Frage: <br>
    Wie kann ich dafür sorgen, das mein Programm auch ohne Debugger vernünftig läuft?<br>
    Was könnte das Beenden des DLL-Threads verhindern?

  • #2
    Hallo,

    wird mit Hilfe der BDE auf die Datenbank zugegriffen? Wenn ja, ist eine spezielle Vorbereitung der BDE (siehe <b>DbiSetCurrSession</b>) notwendig. In meinem Buch <i>Client/Server Datenbankentwicklung mit Delphi</i> ist dazu im Kapitel 6 ein Beispielprojekt zu finden

    Comment


    • #3
      Danke für die prompte Antwort,

      In diesem Fall wird 'leider' nicht mit der BDE auf die DB zugegriffen.
      Dieser DLL-Thread wird ohne das zutun meiner Anwendung erzeugt. Der Thread hängt bis kurz vorm Exitus auf der Funktion<br>
      'ntdll.NtDeviceIoControlFile'.<br>
      Wird die DLL aus einem VC6.0-Programm heraus aufgerufen, funktioniert das ganze auch richtig!?

      H.H. Fiddelk

      Comment

      Working...
      X