Announcement

Collapse
No announcement yet.

ADO in DLL (Problem beim Beenden der DLL)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO in DLL (Problem 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.

    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),Inte ger(@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.
Working...
X