AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi crash in FindFile OpenGl
Thema durchsuchen
Ansicht
Themen-Optionen

crash in FindFile OpenGl

Ein Thema von EWeiss · begonnen am 8. Jul 2008 · letzter Beitrag vom 11. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

crash in FindFile OpenGl

  Alt 8. Jul 2008, 06:17
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:
    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);
dann werden neue Cover gesucht

Delphi-Quellcode:
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;
hier wird die function zum suchen aufgerufen
Delphi-Quellcode:
    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;
Das seltsame an der sache ist lasse ich die Titel einfach weiterlaufen
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 08:42
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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 17:41
Zitat von scp:
Bei dem FindFirst in der Schleife mit dem k bei ScanDirectory fehlt ein begin ... end, weil jedesmal FindClose aufgerufn werden muss.
Ja oder einfach
Delphi-Quellcode:
  with TStringList.Create do
  try
     [....]
  finally
    SysUtils.FindClose(Search);
    Free
  end;
kann mir dann begin . end sparen.[nee doch nicht]
Habs gefixt.
Aber das lößt auch nicht mein problem.

EDIT:
habe die vermutung das es hier dran liegt
Delphi-Quellcode:
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);
irgendwie kommt die laderoutine mit dem Timing nicht klar.
würde es an FindFile liegen dann ging eigentlich gar nichts.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 21:30
Habe das problem gefunden

aCovers := TStringList.Create; Kann das nur lösen in dem ich eine Listbox verwende
und aCovers auf diese Caste

Was läuft hier schief das es mit TStringList nicht funktioniert ?

Delphi-Quellcode:
 if ShowCover = true then
    begin
      if not assigned(aCovers) then
        aCovers := TStringList.Create;
erstelle hier die TStringList und gebe sie nur frei wenn der Anzeigemodus geändert wird.

hier werden die Einträge addiert
Delphi-Quellcode:
          if (not CheckIfDouble(tmpFile, aCovers, false)) then
            aCovers.Add(AnsiUpperCase(Path + Search.Name));
Und das stürzt zu unbestimmten zeiten ab.
Wenn ein neuer Titel geladen wird.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 22:26
Zitat von EWeiss:
Habe das problem gefunden

aCovers := TStringList.Create; Kann das nur lösen in dem ich eine Listbox verwende
und aCovers auf diese Caste

Was läuft hier schief das es mit TStringList nicht funktioniert ?
Warum gibst Du die StringList frei und erstellst eine neue? Du reißt doch auch nicht ein Haus ein und baust ein neues, nur weil Du die Wände im Schlafzimmer in einer neuen Farbe haben möchtest.
TStringList.Clear; sollte doch reichen. Dann nicht mit Assigned(TStringList) prüfen, sondern mit TStringList.Count <> 0.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 22:35
Zitat von Dunkel:
Zitat von EWeiss:
Habe das problem gefunden

aCovers := TStringList.Create; Kann das nur lösen in dem ich eine Listbox verwende
und aCovers auf diese Caste

Was läuft hier schief das es mit TStringList nicht funktioniert ?
Warum gibst Du die StringList frei und erstellst eine neue? Du reißt doch auch nicht ein Haus ein und baust ein neues, nur weil Du die Wände im Schlafzimmer in einer neuen Farbe haben möchtest.
TStringList.Clear; sollte doch reichen. Dann nicht mit Assigned(TStringList) prüfen, sondern mit TStringList.Count <> 0.
da hast allerdings recht
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
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 22:52
Mein Kommentar bezieht sich auf Dein
Zitat von EWeiss:
Kann das nur lösen in dem ich eine Listbox verwende und aCovers auf diese Caste

Was läuft hier schief das es mit TStringList nicht funktioniert ?
Die Listbox gibt die interne TStringList auch nicht bei jeder Änderung frei und erstellt eine neue. Unter Umständen liegt der Fehler wirklich irgendwo da; vor allem, da Assigned(Something) nur auf <> NIL prüft, ein reines TStringList.Free setzt die Variable aber nicht auf NIL. Probier es vielleicht mal mit einem FreeAndNil(TStringList);.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 23:01
Zitat von Dunkel:
Mein Kommentar bezieht sich auf Dein
Zitat von EWeiss:
Kann das nur lösen in dem ich eine Listbox verwende und aCovers auf diese Caste

Was läuft hier schief das es mit TStringList nicht funktioniert ?
Die Listbox gibt die interne TStringList auch nicht bei jeder Änderung frei und erstellt eine neue. Unter Umständen liegt der Fehler wirklich irgendwo da; vor allem, da Assigned(Something) nur auf <> NIL prüft, ein reines TStringList.Free setzt die Variable aber nicht auf NIL. Probier es vielleicht mal mit einem FreeAndNil(TStringList);.
Hast da was falsch verstanden ..
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
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: crash in FindFile OpenGl

  Alt 8. Jul 2008, 23:10
Zitat von EWeiss:
Mein problem tritt aber auf wenn ich die Liste fülle ..
oder anders gesagt neue Cover addiert werden.
OK, Du prüfst aber mit Assigned ob die TStringList gültig ist, Assigned arbeitet aber unter meinen oben genannten Bedingungen nicht zuverlässig. Und in einen Speicherbereich zu schreiben, welcher schon via .Free freigegeben wurde, verursacht Zugriffsverletzungen...

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 ...
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: crash in FindFile OpenGl

  Alt 9. Jul 2008, 05:50
Zitat:
Zu wenig Code um den Fehler einzugrenzen
Welchen erwartest du ?
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
if (aCovers.Count <= QuadCount) then habe jetzt schon alles auf BMP umgestellt da ich dachte es liegt vielleicht am JPGLoader
auch die Cover sind OpenGL conform 512x512
nutzt alles nichts.

gruss Emil
  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 23:14 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