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