Hallo zusammen,
ich habe ein kleines (Anfänger-)Problem mit DLLs. Ich arbeite zum ersten Mal mit DLLs, da ich bisher nie DLLs benutzt habe.
Ich habe mir schon diverse Tutorials durchgelesen, aber das einfachste Testprogramm gibt bei mir eine Zugriffsverletzung, die ich einfach nicht verstehe.
Hier mal der Code aus dem Tutorium:
DLL:
[delph]
library TestDLLProjekt;
uses
SysUtils,
Classes;
{$R *.res}
function addiere(zahl1, zahl2: integer): integer; stdcall;
begin
addiere:=zahl1+zahl2;
end;
exports
addiere;
end.
[/delph]
Und das Test-Projekt dazu:
[delph]
unit TestDLL_EXE_Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
type
TSummenFunktion = function(zahl1, zahl2: integer): integer;
function addieren(zahl1, zahl2: integer): integer;
implementation
{$R *.dfm}
function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
Handle: THandle;
Summe:Integer;
begin
Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'TestDLLProjekt.dll'));
if Handle <> 0 then
begin
@SummenFunktion := GetProcAddress(Handle,'addiere');
if @SummenFunktion <> nil then
begin
Result:=SummenFunktion(1,12);
end;
FreeLibrary(Handle);
end;
Result:=Summe;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=IntToStr(addieren(3,5));
end;
end.
[/delph]
Zunächst mal habe ich die DLL compiliert, die auch erfolgreich erzeugt wurde.
Wenn ich aber mein Testprojekt dann ausführe und die Addition per Buttonclick ausführe, erhält die Summe utopische Werte und ich erhalte eine Access-Violation.
Hat jemand einen Rat, was für einen blöden Fehler ich da mache?
Liebe Grüße und
vielen Dank schonmal vorab,
Peti
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.