Hi,
ich lerne momentan den Umgang mit
DLL.
Dazu hab ich ein simples Test-Beispiel erstellt, welches lediglich ein Quadrat zeichnen soll:
Anwendung
Delphi-Quellcode:
uses Utest;
procedure TForm1.Button1Click(Sender: TObject);
begin
test6(Form1.Canvas);
end;
Utest
Delphi-Quellcode:
unit Utest;
interface
uses
SysUtils,
Classes,
Windows,
Messages,
Variants,
Graphics,
// keine Ahnung welche Unit für Canvas verantwortlich ist.
Controls,
Forms,
Dialogs,
StdCtrls;
procedure test6(alpha:TCanvas);
implementation
procedure test6(alpha:TCanvas);
external '
Pdll.dll';
end.
die Pdll.dll
Delphi-Quellcode:
library Pdll;
uses
SysUtils,
Classes,
Windows,
Messages,
Variants,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
Utest in 'Utest.pas';
{$R *.res}
function test5(x,y:Integer): Integer;
begin
RESULT:=x+y;
end;
procedure test6(alpha:TCanvas);
begin
alpha.Brush.Color:=clred;
alpha.Rectangle(0,0,500,500);
end;
exports
test6,
test5;
begin
end.
Wenn ich das Programm starte und auf den Button klicke, funktioniert alles perfekt. Wenn ich das Programm dann schließe oder nach "test6(Form1.canvas)" noch an der Canvas rumspiele bekomme ich die Fehlermeldung "EAccessViolation in Modul Projekt1...."
Woran könnte das liegen? Ausserdem meckert die Utest-
Unit, wenn ich mehr als eine Methode verwenden will.
Delphi-Quellcode:
.
.
.
.
procedure test6(alpha:TCanvas);
function test5(x,y:Integer): Integer;
implementation
procedure test6(alpha:TCanvas);
function test5(x,y:Integer): Integer;
external 'Pdll.dll';
.
.
.
Hilfe^^,
lG Phiennes