ok..es gibt ein paar Plugins die wirklich Resourcen fressen. Und Winamp selbst machts auch so,das es das alte Plugin beendet, bevor es das neue startet.
Aber dafür gibts ne einfach Lösung. Gib HVIS nicht nach außen und
handle das intern selbst (globale Variable). Dazu noch eine, die dir sagt, welcher Art das aktuell laufende Plugin ist.
Damit kannst du dann die Interface-Routinen stark vereinfachen. Für "Create" und "Destroy" brauchst du jeweils nur 1 Funktion. Der wird vom Anwender übergeben, welche Art von Plugin er haben möchte. Alle anderen Funktionen brauchst du auch nur einmal, da du ja dann intern weißt, welcher Plugintyp läuft.
Das würde dann fürs Erzeugen z.B. so aussehen:
Delphi-Quellcode:
function BASSVIS_INIT(Kind:BASSVIS_KIND_T;AppHandle:Dword;WndHandle:HWND):bool;
begin
if (GLOBALHVIS <> 0) then
BASSVIS_EXIT; //altes Plugin freigeben
GlobalKind := Kind;
Case Kind of
SONIQUE : GLOBALHVIS := BASS_SONIQUEVIS_CreateVis...
WINAMP : GLOBALVIS := BASS_WINAMPVIS_ExecuteVis....
WMP : GLOBALVIS := BASS_WMPVIS_ExecuteVis....
end;
end;
So kannst du alle Funktionen die notwendig sind, globalisieren.