AGB  ·  Datenschutz  ·  Impressum  







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

access violation

Ein Thema von ford42 · begonnen am 2. Okt 2015 · letzter Beitrag vom 9. Okt 2015
Antwort Antwort
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

access violation

  Alt 2. Okt 2015, 09:43
Delphi-Version: XE3
Hey,
ich versuche gerade von einer Unit einer Methode von einer anderen Unit einen Wert zu übergeben, also:

Delphi-Quellcode:
unit Controller;

interface

uses
  Logic;

type
  CalcController = class(TObject)
    private
      m_AddZahl: TBerechnung;
    public
      procedure Notify(p_Action: String; p_Param: String);

  end;

implementation

procedure CalcController.Notify(p_Action: String; p_Param: String);
begin
  if (p_Action = 'Zahl') then
  begin
    m_AddZahl.AddZahl(p_Param);
  end
end;

end.
und

Delphi-Quellcode:
unit Logic;

interface

uses
  System.Classes, System.SysUtils;

type
  TBerechnung = class
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure AddZahl(p_Parameter: String);
  end;

implementation

  procedure TBerechnung.AddZahl(p_Parameter: String);
  var
     eingabeZahl: String;
  begin
    eingabeZahl := eingabeZahl + p_Parameter;
  end;
end.
Aber da kommt bei der Zeile 'm_AddZahl.AddZahl(p_Param);' diese Fehlermeldung 'access violation' :/


Weiß jemand wo ich da den Fehler habe?


Vielen Dank im Voraus
Grüße ford42
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: access violation

  Alt 2. Okt 2015, 09:46
Du musst das Objekt zuerst instanziieren bevor du es benutzt.

Delphi-Quellcode:
unit Controller;

interface

uses
  Logic;

type
  CalcController = class(TObject)
    private
      m_AddZahl: TBerechnung;
    public
      procedure Notify(p_Action: String; p_Param: String);

  end;

implementation

procedure CalcController.Notify(p_Action: String; p_Param: String);
begin
  if (p_Action = 'Zahl') then
  begin
    m_AddZahl := TBerechnung.Create; // <----- das hier dabei schreiben
    m_AddZahl.AddZahl(p_Param);
  end
end;

end.
Nur ist es aber auch wichtig, dass du das Objekt m_AddZahl auch wieder mit m_AddZahl.Free; freigibst wenn du es nicht mehr benötigst.
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: access violation

  Alt 2. Okt 2015, 09:53
Danke,
aber jetzt kommt die Fehlermeldung bereits bei 'm_AddZahl := TBerechnung.Create; // <----- das hier dabei schreiben'. :/
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: access violation

  Alt 2. Okt 2015, 10:07
Ganz sicher? Bist du mal mit dem Debugger durchgegangen und hast das kontrolliert? Mach das mal zuerst noch. Wenn du nicht weiterkommst, dann häng das komplette Projekt mal hier an.

PS: Welche Delphi Version verwendest du? Das kannst du in deinem Profil hinterlegen.
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: access violation

  Alt 2. Okt 2015, 10:13
Ja, ich habe Break-Points gesetzt und als der Fehler kam, war der blaue Pfeil auch bei der Zeile. :/

EDIT: Sry, hab nun alles gepackt
Angehängte Dateien
Dateityp: zip Projekte.zip (3,0 KB, 2x aufgerufen)

Geändert von ford42 ( 2. Okt 2015 um 10:29 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: access violation

  Alt 2. Okt 2015, 10:20
Bitte das komplette Projekt, wenn möglich als ZIP-Datei, anhängen. Hier fehlen sowohl die Projektdatei (*.dpr) also auch die Form-Datei (Gui.dfm).

Edit: OK, die DPR hast du noch nachgeschossen, aber die DFM fehlt trotzdem noch.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: access violation

  Alt 2. Okt 2015, 10:23
Ja, ich habe Break-Points gesetzt und als der Fehler kam, war der blaue Pfeil auch bei der Zeile. :/
Wie greifst du auf CalcController zu? Ich vermute, du instanzierst diesen hier auch nicht?

Und btw:
  1. Klassen deklariert man in Delphi üblicherweise mit einem T -Präfix. Also TCalcController = class statt CalcController = class
  2. Interne Felder in Klassen deklariert man mit einem F -Präfix. Also FAddZahl: TBerechnung; statt m_AddZahl: TBerechnung;
  3. Du brauchst nicht von TObject ableiten, das sind Klassen standardmäßig. Also TCalcController = class ist das gleiche wie TCalcController = class(TObject)
  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 07:06 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