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