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?
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?
Comment