Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zugriffsverletzung in gds32.dll/fbclient.dll (https://www.delphipraxis.net/117469-zugriffsverletzung-gds32-dll-fbclient-dll.html)

Pascal P 18. Jul 2008 16:25

Datenbank: Firebird • Version: 1.5.5 • Zugriff über: IBO

Zugriffsverletzung in gds32.dll/fbclient.dll
 
Hi zusammen!
Ich arbeite derzeit mit der Firebird Version 1.5.5. Meine Applikation besitzt mehrere Threads die alle ihre eigene Datenbankverbindung besitzen.
In wirklich ganz ganz seltenen Fällen passiert es, dass ich eine Speicherzugriffsverletzung in der gds32.dll/fbclient.dll bekomme.
Zugriffsverletzung bei Adresse 02CFCE7B in Modul 'gds32.dll'. Lesen von Adresse 00000004
Was daran etwas störend ist ist das alle anderen Threads dann stehen bleiben. Ich gehe davon aus das die Ursache die Zugriffsverletzung in der DLL ist.

Ich verwende die IBO Komponenten. Ich gehe davon aus das sich alle meine Threads das DLL Handle teilen. Mein Buch sagt mir das ich in einem solchen Fall die DLL für meinen Hauptprozess unloaden sollte um sie dann frisch wieder zu laden.
Allerdings sind das nur Vermutungen und Gedankenspielereien. Ich würde es halt doch sehr gerne schaffen das sich in einem solchen Falle meine Anwendung selbst darum kümmern kann und danach munter fröhlich weiterläuft ohne das man manuell eingreifen musste.

Hat jemand schon mal ähnliche Probleme gehabt? Eventuell liegt es ja auch an der verwendeten Version der gds32.dll/fbclient.dll.
gds32.dll Version 6.3.4.4910

Grüsse Pascal

mkinzler 18. Jul 2008 16:42

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Passt die Client-Dll zum Server?

RavenIV 21. Jul 2008 08:47

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Zitat:

Zitat von mkinzler
Passt die Client-Dll zum Server?

Wollte ich auch grad fragen.

Ich hatte neulich nämlich auch so einen ähnlichen Fall.
Ein kleines Tool von D6 nach D2007 hochgezogen.
Das exe liegt auf einer Freigabe auf dem Server.
Die PCs rufen das Programm von dort auf.
In das Freigabe-Verzeichnis habe ich die gds32.dll reinkopiert, wie ich es eigentlich immer mache.
Starten auf dem Server ging.
Starten auf den PCs ging nicht.
Nach 3 Stunden Suchen ist mir aufgefallen, dass die gds32.dll eine andere Grösse hat, als die, die ich sonst immer verwende. Und es war auch eine andere Versionsnummer.
Kurzerhand hab ich die fbclient.dll aus dem Firebird-Verzeichnis zu dem exe kopiert.
Und die Probleme waren Vergangenheit.

Daraus habe ich gelernt:
Immer die zur Firebird passende Zugriffs-DLL verwenden.

Pascal P 21. Jul 2008 12:33

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Daran liegt es leider nicht. Ich habe explizit die passenden DLL's mitkopiert.

mkinzler 21. Jul 2008 12:40

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Die Versionsnummer sieht aber nicht nach FB aus

Pascal P 21. Jul 2008 18:10

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Ah, ok. Grad gesehen. Habe mich vertippt. Firebird 1.5.4 wird benutzt und die fbclient.dll Version 1.5.4.4910.
Und das müsste dann schon in Ordnung sein. Habe die DLL aus der Firebird Installation verwendet.

RavenIV 22. Jul 2008 07:57

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Zitat:

Zitat von Pascal P
Ah, ok. Grad gesehen. Habe mich vertippt. Firebird 1.5.4 wird benutzt und die fbclient.dll Version 1.5.4.4910.
Und das müsste dann schon in Ordnung sein. Habe die DLL aus der Firebird Installation verwendet.

Wo liegt diese DLL?

Die Suchreihenfolge ist entscheidend.
DLLs werden hier der Reihe nach gesucht:
1) Programm-Verzeichnis
2) Windows\System bzw. Windows\ystem32
3) alle Ordner, die in der PATH-Umgebungsvariablen drin stehen.
Hierbei wird die DLL verwendet, die als erstes gefunden wird.

Pascal P 22. Jul 2008 08:12

Re: Zugriffsverletzung in gds32.dll/fbclient.dll
 
Das Problem mit "Wo liegt denn die DLL und wo wird Sie hergeholt?" kenne ich. Habe damit aber überhaupt keine Probleme, da ich mir die verwendete DLL mittels den IBO Componenten ermittel und auch die Versionsinfo ziehe.
Code:
TIB_SessionBase.GDS_Handle
Das ist also leider, wie bereits gesagt, leider nicht mein Problem das falsche Versionen der Clientdll im Umlauf sind.
So scheint es mir zumindest. Aber um die Frage nochmals zu beantworten. Für gewöhnlich liegt die DLL im Windows Systemordner.
Derzeut jedoch direkt im Programmverzeichnis und von dort wird sie auch gezogen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz