AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation Fehler / .dll

Ein Thema von Phiennes · begonnen am 11. Mai 2009 · letzter Beitrag vom 11. Mai 2009
Antwort Antwort
Phiennes

Registriert seit: 1. Dez 2008
Ort: Bochum
30 Beiträge
 
#1

EAccessViolation Fehler / .dll

  Alt 11. Mai 2009, 03:23
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: EAccessViolation Fehler / .dll

  Alt 11. Mai 2009, 03:47
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)...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Phiennes

Registriert seit: 1. Dez 2008
Ort: Bochum
30 Beiträge
 
#3

Re: EAccessViolation Fehler / .dll

  Alt 11. Mai 2009, 04:03
Ich weiß leider nicht genau, wie ich Handle verwenden kann.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: EAccessViolation Fehler / .dll

  Alt 11. Mai 2009, 04:06
Naja, so in der Art:
Delphi-Quellcode:
procedure Test(Target: HDC); stdcall;
var
  DestCanvas: TCanvas;
begin
  DestCanvas := TCanvas.Create;
  DestCanvas.Handle := Target;
  DestCanvas...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Phiennes

Registriert seit: 1. Dez 2008
Ort: Bochum
30 Beiträge
 
#5

Re: EAccessViolation Fehler / .dll

  Alt 11. Mai 2009, 04:20
sehr schön vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz