AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO in DLL (Schutzverletzung beim Beenden der DLL)
Thema durchsuchen
Ansicht
Themen-Optionen

ADO in DLL (Schutzverletzung beim Beenden der DLL)

Offene Frage von "USchmidt"
Ein Thema von USchmidt · begonnen am 13. Jun 2006
Antwort Antwort
USchmidt

Registriert seit: 12. Jun 2006
Ort: Friedberg
2 Beiträge
 
#1

ADO in DLL (Schutzverletzung beim Beenden der DLL)

  Alt 13. Jun 2006, 09:38
Datenbank: nicht wichtig • Zugriff über: ADO
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:
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.
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).

Weiß hier jemand Rat !!!


Danke für Eure Mühe.
Es ist besser, den Kopf über den Aufgaben und nicht die Aufgaben über den Kopf wachsen zu lassen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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