Hallo,
bei meinen versuchen mit DLL's habe ich das Tutorial auf http://www.tutorials.delphi-source.de/dlls/index.shtml mal nachgebaut.
Die statische Variante funktioniert einwandfrei. Variable 1 und 2 werden vernünftig addiert. Dynamisch sieht mein Quelltext so aus:
unit dllunit;
interface
uses windows;
type
TSummenFunktion = function(zahl1, zahl2: integer): integer;
function addieren(zahl1, zahl2: integer): integer;
implementation
function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
Handle: THandle;
begin
Handle:=LoadLibrary('rechnen.dll');
if Handle <> 0 then
begin
@SummenFunktion := GetProcAddress(Handle, 'addiere');
if @SummenFunktion <> nil then
begin
showmessage(inttostr(SummenFunktion(zahl1, zahl2)));
result:=SummenFunktion(zahl1, zahl2);
end;
FreeLibrary( Handle );
end;
end;
end.
Das Problem:
Nach dem Aufruf der Funktion addieren bricht das Programm ab und ich habe ein CPU-Fenster mit diversen Schutzverletzungen vor mir. Durch das showmessage habe ich festgestellt das das Ergebnis falsch ist und er bei freelib. die Schutzverletzung auftritt.
Wie gesagt, wenn ich die DLL statisch einbinde funktioniert alles.
Ich benutze Delphi 7 pro.
Vielen Dank!
Bye,
Sebastian
bei meinen versuchen mit DLL's habe ich das Tutorial auf http://www.tutorials.delphi-source.de/dlls/index.shtml mal nachgebaut.
Die statische Variante funktioniert einwandfrei. Variable 1 und 2 werden vernünftig addiert. Dynamisch sieht mein Quelltext so aus:
unit dllunit;
interface
uses windows;
type
TSummenFunktion = function(zahl1, zahl2: integer): integer;
function addieren(zahl1, zahl2: integer): integer;
implementation
function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
Handle: THandle;
begin
Handle:=LoadLibrary('rechnen.dll');
if Handle <> 0 then
begin
@SummenFunktion := GetProcAddress(Handle, 'addiere');
if @SummenFunktion <> nil then
begin
showmessage(inttostr(SummenFunktion(zahl1, zahl2)));
result:=SummenFunktion(zahl1, zahl2);
end;
FreeLibrary( Handle );
end;
end;
end.
Das Problem:
Nach dem Aufruf der Funktion addieren bricht das Programm ab und ich habe ein CPU-Fenster mit diversen Schutzverletzungen vor mir. Durch das showmessage habe ich festgestellt das das Ergebnis falsch ist und er bei freelib. die Schutzverletzung auftritt.
Wie gesagt, wenn ich die DLL statisch einbinde funktioniert alles.
Ich benutze Delphi 7 pro.
Vielen Dank!
Bye,
Sebastian
Comment