AGB  ·  Datenschutz  ·  Impressum  







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

EAccessViolation beim Ausführen eines Packages

Ein Thema von DelphiNoobi · begonnen am 27. Mai 2007 · letzter Beitrag vom 27. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
DelphiNoobi

Registriert seit: 24. Apr 2007
8 Beiträge
 
#1

EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 12:38
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 12:40
Wird eine Instant von TForm3 erzeugt (in Unit3)?
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiNoobi

Registriert seit: 24. Apr 2007
8 Beiträge
 
#3

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:09
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:11
Egal ob leer oder nicht, ohne Erzeugung der Instanz geht nichts.
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiNoobi

Registriert seit: 24. Apr 2007
8 Beiträge
 
#5

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:24
Wie erzeuge ich eine Instanz?
Es gibt auch keine Meldung beim complieren.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:26
Form3 := TForm3.Create( self);
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiNoobi

Registriert seit: 24. Apr 2007
8 Beiträge
 
#7

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:38
Wo wird eine Instance definiert? In FormCreate?
Als variable ist Form3 ja als TForm definiert.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:40
Zitat:
Wo wird eine Instance definiert? In FormCreate?
Halt vor der Verwendung. Theoretisch auch kurz vor dem .Open.
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiNoobi

Registriert seit: 24. Apr 2007
8 Beiträge
 
#9

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:49
Ah also schon in Form2.
Cool. Klappt. Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: EAccessViolation beim Ausführen eines Packages

  Alt 27. Mai 2007, 22:52
Man könnte es auch im Initialisierungsteil von Unit3 machen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:42 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