AGB  ·  Datenschutz  ·  Impressum  







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

Klassen, Vererbung und CAST

Ein Thema von bernhard_LA · begonnen am 12. Nov 2024 · letzter Beitrag vom 14. Nov 2024
Antwort Antwort
Seite 1 von 2  1 2      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.136 Beiträge
 
Delphi 11 Alexandria
 
#1

Klassen, Vererbung und CAST

  Alt 12. Nov 2024, 17:45
Delphi-Version: 11 Alexandria
ich habe eine Klasse TBitMapExtension welche über ihre LoadFromFile, SaveToFile in der Lage ist eine Vielzahl von Grafikformaten (*.jpg, *.tig, *.png) zu verarbeiten
Über einen Cast übergebe ich die Klasse an eine Funktion welche für den Dateityp TBitmap entworfen wurde.



Delphi-Quellcode:
  TBitMapExtension = Class(VCL.Graphics.TBitMap)

    procedure LoadFromFile(const Filename: String); override;

    procedure SaveToFile(const Filename: String); override;

  public
    ......
  end;


Delphi-Quellcode:
  Procedure verarbeiteBMP ( ambp : TBitmap)
  begin
          w := abmp.width; // hier kommt es zur AV
  end;




Delphi-Quellcode:
   /// Hauptprogramm
   bmp := TBitMapExtension.Create;
   bmp.loadfromFile();
   verarbeiteBMP( TBitmap(bmp));


Warum bekomme ich in der Funktion verarbeiteBMP eine Zugriffsverletzung wenn ich die Weite eine Bitmap auswerten will ?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
740 Beiträge
 
#2

AW: Klassen, Vererbung und CAST

  Alt 12. Nov 2024, 18:09
Lass Mal den Cast auf TBitmap weg. Den brauchst du hier nicht, da von TBitmap abgeleitet wurde
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
740 Beiträge
 
#3

AW: Klassen, Vererbung und CAST

  Alt 12. Nov 2024, 18:12
Oder ist es dort ein anderes TBitmap als VCL.Graphics.TBitMap?
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Klassen, Vererbung und CAST

  Alt 12. Nov 2024, 18:17
Warum bekomme ich in der Funktion verarbeiteBMP eine Zugriffsverletzung wenn ich die Weite eine Bitmap auswerten will ?
Die TBitmap hat selber keine breite - beim auslesen wird eine interne DIB abgefragt, also FImage.FDIB.dsBm. Vermutlich ist in Deinem Fall FImage nicht zugewiesen.

Du müsstest also beim LoadFromFile dieses DIB anlegen.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.136 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Klassen, Vererbung und CAST

  Alt Gestern, 17:21
kurze Rückmeldung :

ohne den cast auf TBitmap compiliert mein code nicht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Klassen, Vererbung und CAST

  Alt Gestern, 17:34
Dann hat die Variable "bmp" den falschen Typ!

Und abhängig davon, erlaubt der Compiler, dass dort etwas rein kommt, was kein TBitmap oder Nachfahre ist, womit dieser harte Cast alles noch schlimmer machen wird.


Wenn du dich nicht mit Casts auskennst, dann verwende niemals harte, sondern nur weiche Casts.
hart: TBitmap(bmp) ( @Compiler: MACH ES, ich weiß was ich tue und falls nicht ... selbst Schuld)
soft: (bmp as TBitmap) (lieber Compiler, mach es bitte und wenn falsch, dann hau mir eine runter, damit ich es lerne)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (Gestern um 17:39 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Klassen, Vererbung und CAST

  Alt Gestern, 18:28
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
740 Beiträge
 
#8

AW: Klassen, Vererbung und CAST

  Alt Gestern, 18:40
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.

Womit wir wieder bei Beitrag #3 wären
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#9

AW: Klassen, Vererbung und CAST

  Alt Gestern, 19:24
Übergeben wird ein Nachkomme von "VCL.Graphics.TBitMap".
Delphi-Quellcode:
...
verarbeiteBMP( TBitmap(bmp));
Das ruft ja richtig: "Ich bin keine Nachkomme von der TBitmap-Klasse, die diese Funktion erwartet."

Siehe himitsu, so bekommt man auch die richtige Fehlermeldung und läuft nicht in eine Zugriffsverletzung:
Delphi-Quellcode:
...
verarbeiteBMP(bmp as TBitmap);

Geändert von Blup (Gestern um 19:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#10

AW: Klassen, Vererbung und CAST

  Alt Heute, 06:59
Wie schon erwähnt wäre der Cast auf TBitmap eh unnötig, wenn alles richtig wäre.
kurze Rückmeldung :

ohne den cast auf TBitmap compiliert mein code nicht
Da sollte man doch stutzig werden und die Compiler-Meldungen lesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 18:40 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