![]() |
EAccessViolation Fehler / .dll
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:
Utest
uses Utest;
procedure TForm1.Button1Click(Sender: TObject); begin test6(Form1.Canvas); end;
Delphi-Quellcode:
die Pdll.dll
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.
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 |
Re: EAccessViolation Fehler / .dll
Dein Canvas kannst du nicht so einfach an deine DLL weitergeben. Es könnte klappen, wenn du die Unit ShareMem in beiden Projekten als allererstes in der Projektdatei in die uses schreibst, das habe ich nie besonders mir angeschaut, weil es dann nur mit Delphi ginge.
Weitergeben kannst du z.B. einen Device-Context (HDC) und auf dem zeichnen, das sollte die bessere Lösung sein. Die Einbindung deiner Funktion aus der DLL ins Projekt solltest du dir auch noch einmal anschauen... das external bezieht sich auf die jeweilige Prozedur oder Funktion davor (und gehört in die selbe Zeile der Übersicht halber)... |
Re: EAccessViolation Fehler / .dll
Ich weiß leider nicht genau, wie ich Handle verwenden kann.
|
Re: EAccessViolation Fehler / .dll
Naja, so in der Art:
Delphi-Quellcode:
procedure Test(Target: HDC); stdcall;
var DestCanvas: TCanvas; begin DestCanvas := TCanvas.Create; DestCanvas.Handle := Target; DestCanvas... |
Re: EAccessViolation Fehler / .dll
sehr schön vielen Dank :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz