AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem beim Entladen der borlndmm.dll

Ein Thema von Luck · begonnen am 20. Feb 2015 · letzter Beitrag vom 20. Feb 2015
Antwort Antwort
Luck

Registriert seit: 7. Sep 2013
1 Beiträge
 
#1

Problem beim Entladen der borlndmm.dll

  Alt 20. Feb 2015, 07:30
Delphi-Version: XE2
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

Geändert von Luck (20. Feb 2015 um 07:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem beim Entladen der borlndmm.dll

  Alt 20. Feb 2015, 07:53
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Feb 2015 um 07:57 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:40 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