AGB  ·  Datenschutz  ·  Impressum  







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

Array , Löschen von selben verhindern.

Ein Thema von EWeiss · begonnen am 27. Okt 2006 · letzter Beitrag vom 30. Okt 2006
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Array , Löschen von selben verhindern.

  Alt 28. Okt 2006, 17:33
Hallo Emil,

Delphi-Quellcode:
// Voller Pfad des Plugin
FileName := StrPas(f);
das muss nicht sein. In der Regel weiß Delphi zwischen PChar und String automatisch zu konvertieren.

if not FileExists(PChar(FileName)) then f oder FileName genügt - kein casting nötig.

Delphi-Quellcode:
if VisCounter = 0 then
 VisWinCounter := VisCounter;
das ist nicht verständlich - auch weil du so viele globale Variablen benutzt.

Delphi-Quellcode:
  try
    GetMem(VisInfo[VisCounter], SizeOf(TWinampVisInfo));
    ZeroMemory(VisInfo[VisCounter], SizeOf(TWinampVisInfo));
  except
    BassFuncs^.SetError(BASS_ERROR_MEM);
    Exit;
  end;
Wenn VisInfo als statisches Array deklariert ist (siehe Beitrag #1), dann greift der Code hier bei VisCounter = 0 ins Leere.
Kannst du nicht ein dynamisches Array verwenden?

Delphi-Quellcode:
type
  TVisInfo = array of PWinampVisInfo;
var
  VisInfo: TVisInfo;

function AddVisInfo(var vi: TVisInfo): TVisInfo;
begin
  index := Length(vi);
  SetLength(vi, Succ(index));
  New(vi[index]); // Freigabe mit Dispose(vi[index]) - Borland empfiehlt es
  ZeroMemory(vi[index], SizeOf(vi[index]^));
end;

procedure DeleteVisInfo(var vi: TVisInfo; p: PWinampVisInfo);
var
  index, iFound: Integer;
begin
  // locate pointer
  iFound := -1; // not found
  for index := Low(vi) to Length(vi) do
    if (index < Length(vi)) and (vi[index] = p) then
    begin
      iFound := index;
      Break;
    end;

  if iFound <> -1 then
  // fill the gap
  begin
    Dispose(vi[index]);
    if index <> High(vi) then
      vi[index] := vi[High(vi)];
    SetLength(vi, High(vi));
  end;
end;
An die Stelle der globalen Variable VisCounter könnte dann Length(VisInfo) treten. Wenn du ein statisches Array benutzen musst, dann müsstest du aber ähnlich vorgehen.

Delphi-Quellcode:
// ...
    // SetCurrentDirectory(PChar(FileName));
    // vielleicht besser so:
    SetCurrentDirectory(ExtractFilePath(f));
Jetzt muss ich erstmal eine Pause machen - deine Probleme sind immer so umfangreich...

Freundliche Grüße
  Mit Zitat antworten Zitat
 


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 03:20 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