![]() |
Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Hi,
mein Prolem ist eine Zugriffsverletzung bei der Übergabe von mehreren Bitmaps.
Delphi-Quellcode:
procedure TMyReportingObj.RvGetCols(Connection: TRvCustomConnection);
begin with Connection do begin WriteField('Bild1', dtGraphic, 20, '', ''); WriteField('Bild2', dtGraphic, 20, '', ''); WriteField('Bild3', dtGraphic, 20, '', ''); WriteField('Bild4', dtGraphic, 20, '', ''); end; end; procedure TMyReportingObj.RvGetRow(Connection: TRvCustomConnection); var st_Bild1, st_Bild2, st_Bild3, st_Bild4: TMemoryStream; begin st_Bild1 := TMemoryStream.Create; GetPicture(st_Bild1, 500, 500); // zur Laufzeit erzeugtes Bild (Höhe = 500, Breite = 500 Pixel) // Bild wird als Bitmap erzeugt und als Stream übergeben. st_Bild2 := TMemoryStream.Create; GetPicture(st_Bild2, 500, 500); st_Bild3 := TMemoryStream.Create; GetPicture(st_Bild3, 500, 500); st_Bild4 := TMemoryStream.Create; GetPicture(st_Bild4, 500, 500); with Connection do try WriteBlobData(st_Bild1.Memory^, st_Bild1.Size); // st_Bild1.Size = 1000 054 Byte WriteBlobData(st_Bild2.Memory^, st_Bild2.Size); WriteBlobData(st_Bild3.Memory^, st_Bild3.Size); WriteBlobData(st_Bild4.Memory^, st_Bild4.Size); finally st_Bild1.Free; st_Bild1.Free; st_Bild1.Free; st_Bild1.Free; end; end; :? Bei der Übergabe der Bilder via. "WriteBlobData" habe ich für Bild1 und Bild2 zwei kein Problem! Erst beim Bild3 gibt es ene Zugriffsverletzung! :? Wenn ich die Abmessungen der Bilder anpasse und von 500x500 auf 64x64 reduziere, dann gibt es keine Zugriffsverletzung. (Das lässt auf ein Speicherproblem schließen.) :!: Das ist aber keine Lösung! :!: Hat jemand eine Idee wie ich alle Bilder mit einer Auflösung von 500x500 übergeben kann? Gruß Jan |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Wenn ich das Bild als MetaFile erzeuge (statt einer Bitmap), dann beträgt die Größe des Stream für ein Bild 45900 Byte. Damit verschiebt sich das Problem von Bild3 auf Bild4.
Ich möchte noch einmal kurz betonen das Problem ist nicht von der Prozedur "GetPicture" oder vom Bild abhängig! Die Zugriffsverletzung kommt immer bei der dritten bzw. vierten Übergabe (via. "WriteBlobData") Habe ich etwas vergessen vorher anzugeben? Gruß |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
hoi,
in einem anderen Beispiel habe ich mal gesehen das vorher der Speicher reserviert wurde bei Verwendung von WriteBlobData. Vllt. hilft das schon. So in etwa:
Delphi-Quellcode:
cya
GetMem(Buffer,Länge);
WriteBlobData(Buffer,Länge); FreeMem(Buffer); |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Hallo soulies,
leider hilft es nicht weiter, :cry: die Übergabe funktioniert ja auch, kommt der Rave Report damit vieleicht nicht klar? ich verwende Rave Report: BE 7.6.2 hat jemand noch eine Idee? |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
hoi,
noch was
Delphi-Quellcode:
sollte bestimmt sein
finally
st_Bild1.Free; st_Bild1.Free; st_Bild1.Free; st_Bild1.Free; end;
Delphi-Quellcode:
daher wahrscheinlich auch die zugriffsverletzung
finally
st_Bild1.Free; st_Bild2.Free; st_Bild3.Free; st_Bild4.Free; end; cya |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Warum nicht gleich so?
Delphi-Quellcode:
procedure TMyReportingObj.RvGetRow(Connection: TRvCustomConnection);
var st_Bild1, st_Bild2, st_Bild3, st_Bild4: TMemoryStream; begin st_Bild1 := TMemoryStream.Create; try GetPicture(st_Bild1, 500, 500); // zur Laufzeit erzeugtes Bild (Höhe = 500, Breite = 500 Pixel) // Bild wird als Bitmap erzeugt und als Stream übergeben. st_Bild2 := TMemoryStream.Create; try GetPicture(st_Bild2, 500, 500); st_Bild3 := TMemoryStream.Create; try GetPicture(st_Bild3, 500, 500); st_Bild4 := TMemoryStream.Create; try GetPicture(st_Bild4, 500, 500); with Connection do WriteBlobData(st_Bild1.Memory^, st_Bild1.Size); // st_Bild1.Size = 1000 054 Byte WriteBlobData(st_Bild2.Memory^, st_Bild2.Size); WriteBlobData(st_Bild3.Memory^, st_Bild3.Size); WriteBlobData(st_Bild4.Memory^, st_Bild4.Size); finally st_Bild4.Free; end; finally st_Bild3.Free; end; finally st_Bild2.Free; end; finally st_Bild1.Free; end; end; |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Zitat:
ja das sollte es! Zitat:
nein deswegen nicht! (ich hatte mich nur verschrieben) die Zugriffsverletzung kommt unmittelbar beim Aufruf von "WriteBlobData(st_Bild3.Memory^, st_Bild3.Size);" |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
@DeddyH
naja und was soll die Verschachtelung bringen? |
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
Ich habe es zwar per C&P auch ohne, aber fehlt da nicht ein begin-end nach dem with?
[edit] Zitat:
|
AW: Rave Report Zugriffsverletztung bei Übergabe von einem Bild
ja, bei deinem Quellcode fehlt nach der with -anweisung das begin und end!
(bei mir wird es auch im Fehlerfall freigegeben!) muss ich vieleicht bei der Rave-Datei noch irgend einen Parameter setzen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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