![]() |
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:
Das klappt gut, solange das Package aus einer Unit besteht.
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;
Delphi-Quellcode:
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.
unit Unit2;
... procedure TForm2.Button1Click(Sender: TObject); begin Self.Close; end; initialization RegisterClass(TForm2); finalization UnRegisterClass(TForm2); end.
Delphi-Quellcode:
Drücke ich dann auf den Button der Unit3 öffnen soll, erhalte ich folgende Fehlermeldung:
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. 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 |
Re: EAccessViolation beim Ausführen eines Packages
Wird eine Instant von TForm3 erzeugt (in Unit3)?
|
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. |
Re: EAccessViolation beim Ausführen eines Packages
Egal ob leer oder nicht, ohne Erzeugung der Instanz geht nichts.
|
Re: EAccessViolation beim Ausführen eines Packages
Wie erzeuge ich eine Instanz?
Es gibt auch keine Meldung beim complieren. |
Re: EAccessViolation beim Ausführen eines Packages
Delphi-Quellcode:
Form3 := TForm3.Create( self);
|
Re: EAccessViolation beim Ausführen eines Packages
Wo wird eine Instance definiert? In FormCreate?
Als variable ist Form3 ja als TForm definiert. |
Re: EAccessViolation beim Ausführen eines Packages
Zitat:
|
Re: EAccessViolation beim Ausführen eines Packages
Ah also schon in Form2.
Cool. Klappt. Danke :D |
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. |
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