![]() |
Datenbank: nicht wichtig • Zugriff über: ADO
ADO in DLL (Schutzverletzung beim Beenden der DLL)
Hallo liebe Delphigemeinde !
Ich habe ein Problem mit ADO in DLL. Nach dem es im Hauptprojekt nicht funktionierte, habe ich mir ein Miniprojekt erstellt. Die DLL enhält Ihren Haupteil und ein Datenmodul.
Delphi-Quellcode:
Solange ich im Datenmodul noch kein ADO-Objekt habe, funktioniert diese DLL wie zu erwarten. Sobald ich dann ein ADO-Objekt im Modul einbinde, kommt es beim beenden der DLL (DataModuleAccess.Free) zu einer kurzen Verzögerung un dann zu der Meldung "zu viele Exception" aufgetreten (unter NT/2000). Bei XP kommt eine Schutzverletzung. Lasse ich mal das "DataModuleAccess.Free" weg (ich weiß, nicht korrekt), wird die DLL unter NT/2000 ohne Fehler beendet, bei XP Schutzverletzung. Ich dachte, daß es am Datenmodul liegt und habe das Ganze noch mit einer Form probiert - identisch. Ubrigens ist es Egal, welches ADO-Objekt man verwendet (ich habe es mit "Connect" und "DataSet" probiert).
library DLLTest;
uses SysUtils, Classes, Windows, ActiveX, Forms, DataModul in 'DataModul.pas' {DataModuleAccess: TDataModule}; {$R *.res} var DLLProcNext: procedure(Reason: Integer);STDCALL = nil; // DLL starten/beenden procedure Initalisation(Reason: DWORD); begin case Reason of // DLL wird gestartet DLL_PROCESS_ATTACH: begin CoInitialize(nil); // Datenmodul erstellen DataModuleAccess := nil; DataModuleAccess := TDataModuleAccess.Create(nil); end; // von DLL_PROCESS_ATTACH: // DLL wird beendet DLL_PROCESS_DETACH: begin // Datenmodul freigeben if Assigned(DataModuleAccess) then begin if DataModuleAccess.ADOConAdmin.Connected then DataModuleAccess.ADOConAdmin.Close; DataModuleAccess.Free; end; // von Assigned(DataModuleAccess) CoUninitialize; end; // von DLL_PROCESS_DETACH: end; // von case Reason of end; // Schnittstelle // ============= exports DLL_DBOpen, DLL_DBClose; begin // DLL wird gestartet/beendet DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc),Integer(@Initalisation))); Initalisation(DLL_PROCESS_ATTACH); end. Weiß hier jemand Rat !!! Danke für Eure Mühe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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