Hallo,
<P>
Ich habe ein Problem mit der gds32.dll
<P>
Zur Beschreibung meines Programmes sind zwei Sequenzdiagramme als JPEG-Bilder unter:
<P>
www.qutronic.de/MsgRcv.jpg <P>
wo ich glegentlich folgende Meldung in meinem logfile finde:
11:48:25-E: Exception in TDDb.InsertKeyMsg:Zugriffsverletzung bei Adresse 4053D17A in Modul 'gds32.dll'. Lesen von Adresse 00000050
<P>
und
<P>
www.qutronic.de/MsgProcessing.jpg
<P>
wo ich glegentlich folgende Meldung in meinem logfile finde:
12:57:04-E: Exception in TDDb.TlgStreamToDb:Zugriffsverletzung bei Adresse 4053D17A in Modul 'gds32.dll'. Lesen von Adresse 00000024
<P>
hinterlegt. Der Ort des Geschehens ist rot umrandet.
Das Programm arbeitet in einem eigenständigen Thread, da es später als NT-Dienst eingesetzt werden soll. Es empfängt UDP-Nachrichten, wertet diese aus und trägt das Ergebnis der Auswertung in einer Interbase Datenbank ein.
Einträge in die Datenbank finden zu asynchronen Zeitpunkten statt.
<P>
1. Für den Empfang der UDP-Nachrichten läuft ein separater Thread der mit dem Empfang einer Nachricht die OnUdpRcv Methode des Arbeitsthreads aufruft. Zwecks späterer Diagnosemöglichkeiten wird an dieser Stelle die UDP-Nachricht als BLOB in die Datenbank geschrieben. Anschließend wird die Nachricht „vorverdaut“ in einer EmpfangsQueue abgelegt und ein Windows Event ausgelöst. <P>
2. Das unter 1. ausgelöste Event wird in der Execute Methode meines Workerthreads via WaitForMultipleObjects erkannt, woraufhin die vorverdaute Nachricht analysiert und das Ergebnis der Analyse in die Datenbank geschrieben wird.
<P>
Auf verschiedenen Hinweise in der Borland Newsgroup habe ich bereits folgende Maßnahmen getroffen:
<P>
- Die verwendeten IBX Komponenten werden zur Laufzeit mit Create inherhalb der Execute Methode instanziert, also im Kontext des Workerthreads. <P>
- Die Verbindung zur Datenbank wird Remote aufgebaut : Server: c:\... <P>
- Der Zugriff auf die IBX-Instanzen ist durch TCriticalSection geschützt. <P>
<P>
Wenn ich den Aufruf von “TDDb.TlgStreamToDb” unterbinde habe ich kein Problem mehr mit der gds32.dll !
<P>
Was mache ich falsch?
<P>
Besten Dank für Euere Hilfe im Voraus
<P>
Rainer
<P>
Ich habe ein Problem mit der gds32.dll
<P>
Zur Beschreibung meines Programmes sind zwei Sequenzdiagramme als JPEG-Bilder unter:
<P>
www.qutronic.de/MsgRcv.jpg <P>
wo ich glegentlich folgende Meldung in meinem logfile finde:
11:48:25-E: Exception in TDDb.InsertKeyMsg:Zugriffsverletzung bei Adresse 4053D17A in Modul 'gds32.dll'. Lesen von Adresse 00000050
<P>
und
<P>
www.qutronic.de/MsgProcessing.jpg
<P>
wo ich glegentlich folgende Meldung in meinem logfile finde:
12:57:04-E: Exception in TDDb.TlgStreamToDb:Zugriffsverletzung bei Adresse 4053D17A in Modul 'gds32.dll'. Lesen von Adresse 00000024
<P>
hinterlegt. Der Ort des Geschehens ist rot umrandet.
Das Programm arbeitet in einem eigenständigen Thread, da es später als NT-Dienst eingesetzt werden soll. Es empfängt UDP-Nachrichten, wertet diese aus und trägt das Ergebnis der Auswertung in einer Interbase Datenbank ein.
Einträge in die Datenbank finden zu asynchronen Zeitpunkten statt.
<P>
1. Für den Empfang der UDP-Nachrichten läuft ein separater Thread der mit dem Empfang einer Nachricht die OnUdpRcv Methode des Arbeitsthreads aufruft. Zwecks späterer Diagnosemöglichkeiten wird an dieser Stelle die UDP-Nachricht als BLOB in die Datenbank geschrieben. Anschließend wird die Nachricht „vorverdaut“ in einer EmpfangsQueue abgelegt und ein Windows Event ausgelöst. <P>
2. Das unter 1. ausgelöste Event wird in der Execute Methode meines Workerthreads via WaitForMultipleObjects erkannt, woraufhin die vorverdaute Nachricht analysiert und das Ergebnis der Analyse in die Datenbank geschrieben wird.
<P>
Auf verschiedenen Hinweise in der Borland Newsgroup habe ich bereits folgende Maßnahmen getroffen:
<P>
- Die verwendeten IBX Komponenten werden zur Laufzeit mit Create inherhalb der Execute Methode instanziert, also im Kontext des Workerthreads. <P>
- Die Verbindung zur Datenbank wird Remote aufgebaut : Server: c:\... <P>
- Der Zugriff auf die IBX-Instanzen ist durch TCriticalSection geschützt. <P>
<P>
Wenn ich den Aufruf von “TDDb.TlgStreamToDb” unterbinde habe ich kein Problem mehr mit der gds32.dll !
<P>
Was mache ich falsch?
<P>
Besten Dank für Euere Hilfe im Voraus
<P>
Rainer