Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem beim Entladen der borlndmm.dll (https://www.delphipraxis.net/184021-problem-beim-entladen-der-borlndmm-dll.html)

Luck 20. Feb 2015 07:30

Delphi-Version: XE2

Problem beim Entladen der borlndmm.dll
 
Hi Leute ich bin auf ein lustiges Phänomen gestoßen und zwar habe ich auf meinem Rechner drei verschiedene Versionen einer Borlndmm.dll (V3.../ V16.../ V19...).

Nun habe ich eine Testapp geschrieben welche mir lediglich eine Dll auf Knopfdruck lädt und diese wieder entlädt.
Die zu ladende DLL enthält nichts außer einen sharemem Eintrag.

Nun zu meinem Problem wenn ich die DLL entladen möchte und ich benutze die V16.../ V19... Version der Borlndmm.dll welche ja automatisch durch sharemem geladen wird dann kommen enorm viele Exceptions mit der Meldung 'access violation at 0x00000000: read of address 0x00000000'.

Wenn ich jedoch das gleiche mit der Borlndmm.dll V3... mache dann passiert hierbei nichts und alles läuft wie es soll (DLLs laden und entladen).

Kann sich das von euch jemand erklären wieso die V16.../ V19... hierbei probleme haben?
Nur zur Info der sharemem existiert nur in der DLL nicht in der Testapp.


Der Code zum Laden der DLL:

const
Libname = 'C:\Data\TESTDLL.dll';

type
...

var
LibHandle: THandle;

implementation

{$R *.dfm}

procedure TForm.Load( Sender: TObject )
begin
LibHandle := LoadLibrary( Libname );
end

procedure TForm.UnLoad( Sender: TObject )
begin
FreeLibrary( LibHandle );
end

Code der DLL:

library TESTDLL

uses
sharemem, System.SysUtils, System.Classes;

{$R *.res}

begin
end

himitsu 20. Feb 2015 07:53

AW: Problem beim Entladen der borlndmm.dll
 
Wenn es sowieso nur in der DLL ist, warum ist es da überhaupt drin?

ShareMem ist dafür da, um über Modulgrenzen (EXE<>DLL und/oder DLL/DLL) hinweg den Speichermanager zu scharen.

Und ansonsten wirde ich heutzutage auch ganz auf diese DLL verzichten und System.SimpleShareMem.pas verwenden, welches den eingebauten Speichermanager der DLL/EXE (jenachdem wer zuerst geladen wird) gemeinsam zu verwenden.


An deiner Stell wirde ich mal den Debugger nehmen und schauen von wo diese Exceptions her kommen.
Delphi XE2 müsste Version 16.0 sein, also wäre eigentlich die V16 die passendere Version.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 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