![]() |
crash in FindFile OpenGl
Weis nicht was los ist aber mit unter crasht meine Anwendung sobald ich
den dritten oder vierten Titel starte und das dazugehörige Cover eingeladen wird. Es kommt keine bezeichnende meldung außer das standard mäßige AV kann nicht lesen bla.. bla In LoadSetting gebe ich die Texturen frei
Delphi-Quellcode:
dann werden neue Cover gesucht
if Assigned(QuadTexture) then
begin glDeleteTextures(Length(QuadTexture), @QuadTexture[Low(QuadTexture)]); SetLength(QuadTexture, 0); end; glDeleteTextures(1, @BackTexture); // Texture für Hintergrund glDeleteTextures(1, @GradientTex); // Texture für DiskSpectrum glDeleteTextures(1, @MeterTexture); // Texture für VUMeter glDeleteTextures(1, @PeaksTexture); // Texture für Peaks glDeleteTextures(1, @SpectrumTexture); // Texture für Spectrum glDeleteTextures(1, @BarTexture); // Texture für Slider glDeleteTextures(1, @PrivateTexture); // Texture für CDLabel glDeleteTextures(1, @NoCoverTexture); // Texture für NoCover SetLength(quadTexture, QuadCount);
Delphi-Quellcode:
hier wird die function zum suchen aufgerufen
procedure ScanDirectory(Path, Mask: String; SubFolder: Boolean);
var Attrib,k : Integer; Search : TSearchRec; aFileName : string; tmpFile : string; begin Attrib := faArchive + faReadOnly + faHidden; if Path[Length(Path)] <> '\' then Path := Path + '\'; with TStringList.Create do try CommaText := Mask; for k := 0 to Count - 1 do if FindFirst(Path + '*.' + Strings[k], Attrib, Search) = 0 then repeat aFileName := ExtractFileName(Search.Name); // extract extension aFileName := Copy(aFileName, 1, length(aFileName) - length(ExtractFileExt(aFileName))); // UpperCase aFileName := AnsiUpperCase(aFileName); tmpFile := AnsiUpperCase(Path + Search.Name); if (aFileName = 'COVER') or (aFileName = 'CDLABEL') then begin if (not CheckIfDouble(tmpFile, aCovers, false)) then aCovers.Add(AnsiUpperCase(Path + Search.Name)); end; until FindNext(Search) <> 0; SysUtils.FindClose(Search); finally Free end; if SubFolder then begin if FindFirst(Path + '*.*', faDirectory, Search) = 0 then begin repeat if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then ScanDirectory(Path + Search.Name, Mask, SubFolder); until FindNext(Search) <> 0; SysUtils.FindClose(Search); end; end; end;
Delphi-Quellcode:
Das seltsame an der sache ist lasse ich die Titel einfach weiterlaufen
if ShowCover = true then
begin if not assigned(aCovers) then aCovers := TStringList.Create; if CoverPath <> '' then begin if CoverPath <> Path then ScanDirectory(CoverPath, 'bmp, tga, jpg', False); if (aCovers.count <= QuadCount) then begin aFilledQuads := 0; for i := 0 to aCovers.count-1 do begin // den Dateinamen extrahieren aFileName := ExtractFileName(aCovers[i]); // die Dateiendung abscheiden aFileName := Copy(aFileName, 1, length(aFileName) - length(ExtractFileExt(aFileName))); // Upper-Case machen aFileName := AnsiUpperCase(aFileName); if (aFileName <> 'COVER') then begin QuadTexture[i] := NoCoverTexture; dec(aFilledQuads); end else begin LoadTexture(aCovers[i], quadTexture[aFilledQuads], False); end; inc(aFilledQuads); end; if (QuadCount >= (aCovers.count - 1)) then begin for q := (aCovers.count - aFilledQuads) to QuadCount do QuadTexture[q] := NoCoverTexture; end; // end for i end; // end aCovers.count end; // end CoverPath end; //end ShowCover end; also wenn das eine beendet wird das nächste über eine syncproc gestartet dann läuft alles rund Wechsel ich die Titel von Hand doppelklick Kommt es vor das nach dem 3 oder 4 Titel die Anwendung beendet mit dem oben genannten AV. Weis mir keinen rat woran das liegen könnte. gruss Emil |
Re: crash in FindFile OpenGl
Bei dem FindFirst in der Schleife mit dem k bei ScanDirectory fehlt ein begin ... end, weil jedesmal FindClose aufgerufn werden muss.
Delphi-Quellcode:
for k := 0 to Count - 1 do
if FindFirst(Path + '*.' + Strings[k], Attrib, Search) = 0 then begin repeat aFileName := ExtractFileName(Search.Name); // extract extension aFileName := Copy(aFileName, 1, length(aFileName) - length(ExtractFileExt(aFileName))); // UpperCase aFileName := AnsiUpperCase(aFileName); tmpFile := AnsiUpperCase(Path + Search.Name); if (aFileName = 'COVER') or (aFileName = 'CDLABEL') then begin if (not CheckIfDouble(tmpFile, aCovers, false)) then aCovers.Add(AnsiUpperCase(Path + Search.Name)); end; until FindNext(Search) <> 0; SysUtils.FindClose(Search); end; |
Re: crash in FindFile OpenGl
Zitat:
Delphi-Quellcode:
kann mir dann begin . end sparen.[nee doch nicht]
with TStringList.Create do
try [....] finally SysUtils.FindClose(Search); Free end; Habs gefixt. Aber das lößt auch nicht mein problem. EDIT: habe die vermutung das es hier dran liegt
Delphi-Quellcode:
irgendwie kommt die laderoutine mit dem Timing nicht klar.
function LoadJPGTexture(Filename: String; var Texture: GLuint; LoadFromResource : Boolean): Boolean;
// Create Bitmap BMP:=TBitmap.Create; BMP.pixelformat:=pf32bit; BMP.width:=JPG.width; BMP.height:=JPG.height; BMP.canvas.draw(0, 0, JPG); würde es an FindFile liegen dann ging eigentlich gar nichts. gruss Emil |
Re: crash in FindFile OpenGl
Habe das problem gefunden
Delphi-Quellcode:
Kann das nur lösen in dem ich eine Listbox verwende
aCovers := TStringList.Create;
und aCovers auf diese Caste Was läuft hier schief das es mit TStringList nicht funktioniert ?
Delphi-Quellcode:
erstelle hier die TStringList und gebe sie nur frei wenn der Anzeigemodus geändert wird.
if ShowCover = true then
begin if not assigned(aCovers) then aCovers := TStringList.Create; hier werden die Einträge addiert
Delphi-Quellcode:
Und das stürzt zu unbestimmten zeiten ab.
if (not CheckIfDouble(tmpFile, aCovers, false)) then
aCovers.Add(AnsiUpperCase(Path + Search.Name)); Wenn ein neuer Titel geladen wird. gruss Emil |
Re: crash in FindFile OpenGl
Zitat:
TStringList.Clear; sollte doch reichen. Dann nicht mit Assigned(TStringList) prüfen, sondern mit TStringList.Count <> 0. |
Re: crash in FindFile OpenGl
Zitat:
werd das nochmal prüfen ob es in zusammenhang mit meinen problem steht. Hab zwar geschrieben gelößt .. ist es aber nicht. Scheint wirklich ein Problem mit OpenGL zu sein alles schon versucht Anstelle JPG jetzt nur noch BMP verwendet stürzt trotzdem ab. hmm vielleicht gebe ich es auf mit dem Projekt. trotzdem Danke. gruss Emil |
Re: crash in FindFile OpenGl
Mein Kommentar bezieht sich auf Dein
Zitat:
|
Re: crash in FindFile OpenGl
Zitat:
Ich gebe sie nicht jedesmal wieder frei nur wenn der Modus sich ändern quasi die Covers nicht mehr verwendet werden. Mein problem tritt aber auf wenn ich die Liste fülle .. oder anders gesagt neue Cover addiert werden. gruss Emil |
Re: crash in FindFile OpenGl
Zitat:
Edit: Ja, jetzt weiß ich, was Du meinst. Nichts desto trotz verursacht schreiben in ungültige Speicherbereiche Zugriffsverletzungen. Zu wenig Code um den Fehler einzugrenzen :glaskugel: ... |
Re: crash in FindFile OpenGl
Zitat:
Habe den ganzen code für das Problem gepostet hilft mir aber auch nicht. Komme nicht dahinter warum das teil unerwartet abschmiert AV kann nicht lesen von Addresse 00000004 immer das gleiche. Nur damit kann ich nichts anfangen. OpenGL kann es nicht sein denn das prüfe ich mit der CheckError Function von Lossy eX Was er mir schon gemeldet hat war out of resources.. kann ich auch nicht verstehen da alle texturen beim neuen einladen eines Covers gelöscht werden. Wenn ich dann unterbreche springt er in diese zeile
Delphi-Quellcode:
habe jetzt schon alles auf BMP umgestellt da ich dachte es liegt vielleicht am JPGLoader
if (aCovers.Count <= QuadCount) then
auch die Cover sind OpenGL conform 512x512 nutzt alles nichts. gruss Emil |
Re: crash in FindFile OpenGl
muss noch mal posten
Hab den Fehler gefunden. ;) alte
Delphi-Quellcode:
neue
// fill all Quads with NoCoverTexture
if FileExists(Path + UpperCase('Data\images\CompDisk\Default\NoCover.BMP')) then begin LoadTexture(Path + 'Data\images\CompDisk\Default\NoCover.BMP', NoCoverTexture, False); for q := 0 to QuadCount do QuadTexture[q] := NoCoverTexture; end else NoCoverTexture := 0;
Delphi-Quellcode:
Jetzt sagt mir mal jemand warum der Debuger das nicht korrekt erkennt .
// fill all Quads with NoCoverTexture
if FileExists(Path + UpperCase('Data\images\CompDisk\Default\NoCover.BMP')) then begin LoadTexture(Path + 'Data\images\CompDisk\Default\NoCover.BMP', NoCoverTexture, False); for q := 0 to QuadCount -1 do QuadTexture[q] := NoCoverTexture; end else NoCoverTexture := 0; Sehr traurig selbst VB6 kann das :mrgreen: gruss Emil |
Re: crash in FindFile OpenGl
Schalte RangeChecks an, und schon ist der Debugger schlauer. (Nicht immer ist die Technik allein "unschlau" :P)
Edit: Altertativ nutze von vorne herein High() und Low(), dann wirst du nie nie wieder so ein Problem haben. |
Re: crash in FindFile OpenGl
Zitat:
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 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