Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   EAccessViolation beim Ausführen eines Packages (https://www.delphipraxis.net/92844-eaccessviolation-beim-ausfuehren-eines-packages.html)

DelphiNoobi 27. Mai 2007 12:38


EAccessViolation beim Ausführen eines Packages
 
Hallo,
Ich arbeite mit Delphi 7 und habe nach einem Tutorium die Erstellung von Packages studiert.
Im Mainprogramm wird nur das Package durch PressButton aufgerufen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
PackageModule := LoadPackage('Package1.bpl');
if PackageModule <> 0 then
  begin
  AClass := GetClass('TForm2');
  if AClass <> nil then
  with TComponentClass(AClass).Create(Application)
    as TCustomForm do
  begin
    ShowModal;
    Free;
  end;
  UnloadPackage(PackageModule);
  end;
end;
Das klappt gut, solange das Package aus einer Unit besteht.

Delphi-Quellcode:
unit Unit2;

...

procedure TForm2.Button1Click(Sender: TObject);
begin
Self.Close;
end;

initialization
RegisterClass(TForm2);

finalization
UnRegisterClass(TForm2);

end.
Wenn ich dem Package eine Unit hinzufüge, die ich mit einem Button aufrufe, werden Package und Programm nach wie vor ohne Fehlermeldung kompiliert und erzeugt.

Delphi-Quellcode:
unit Unit2;

...

implementation

uses Unit3;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
Self.Close;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Form3.Show;
Self.Close;
end;

initialization
RegisterClass(TForm2);

finalization
UnRegisterClass(TForm2);

end.
Drücke ich dann auf den Button der Unit3 öffnen soll, erhalte ich folgende Fehlermeldung:

Im Projekt Projekt1.exe ist eine Exception der Klasse EAcceccViolation aufgetreten, Meldung: Zugriffsverletzung bei Adresse 004ADAC6 in Modul 'vcl70.bpl'. Lesen von Adresse 000002F4'.

Unit 3 ist ein leeres Formular.

Kann mir vielleicht wer einen Tip geben, was ich falsch mache?

Vielen Dank,
DelphiNoobi

mkinzler 27. Mai 2007 12:40

Re: EAccessViolation beim Ausführen eines Packages
 
Wird eine Instant von TForm3 erzeugt (in Unit3)?

DelphiNoobi 27. Mai 2007 22:09

Re: EAccessViolation beim Ausführen eines Packages
 
Unit 3 ist einfach ein leeres Formular.

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm3 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

end.

mkinzler 27. Mai 2007 22:11

Re: EAccessViolation beim Ausführen eines Packages
 
Egal ob leer oder nicht, ohne Erzeugung der Instanz geht nichts.

DelphiNoobi 27. Mai 2007 22:24

Re: EAccessViolation beim Ausführen eines Packages
 
Wie erzeuge ich eine Instanz?
Es gibt auch keine Meldung beim complieren.

mkinzler 27. Mai 2007 22:26

Re: EAccessViolation beim Ausführen eines Packages
 
Delphi-Quellcode:
Form3 := TForm3.Create( self);

DelphiNoobi 27. Mai 2007 22:38

Re: EAccessViolation beim Ausführen eines Packages
 
Wo wird eine Instance definiert? In FormCreate?
Als variable ist Form3 ja als TForm definiert.

mkinzler 27. Mai 2007 22:40

Re: EAccessViolation beim Ausführen eines Packages
 
Zitat:

Wo wird eine Instance definiert? In FormCreate?
Halt vor der Verwendung. Theoretisch auch kurz vor dem .Open.

DelphiNoobi 27. Mai 2007 22:49

Re: EAccessViolation beim Ausführen eines Packages
 
Ah also schon in Form2.
Cool. Klappt. Danke :D

mkinzler 27. Mai 2007 22:52

Re: EAccessViolation beim Ausführen eines Packages
 
Man könnte es auch im Initialisierungsteil von Unit3 machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz