Zitat:
Geht nicht HVIS muss nach außen freigegeben werden.
Ist das VisHandle und wird von der Anwendung zur kontrolle über die Plugins benötigt.
Dann muss ich die ganze Lib umschreiben da zig Functionen diesen Parameter verwenden.
Die Kontrolle der Plugins läuft ja ebenfalls über deine
API. In dem du einen "Satz" Funktionen schreibst (Also nicht für jeden Plugintyp die Funktionen, sondern für alle Plugintypen die gleiche Funktionen), kannst du dir das rausgeben von HVIS sparen. Die Plugin-Unabhängigen Funktionen gibst du nach außen (exportierst du). Diese Funktionen machen nix anderes als deine Plugin-Abhängigen Funktionen aufzurufen. Da du intern weißt, welchen Plugintyp gerade aktiv ist und welches
Handle das ist, brauchst du das nicht nach außen geben.
Du legst also, wie Robert schon vorgeschlagen hat, ein Superset der Pluginfunktionen an, das du exportierst. Dieses Superset wird exportiert (statt der bisherigen funktionen) und leitet letztendlich
alles an die entsprechenden Pluginfunktionen weiter.
Beispiel:
In der
DLL:
Delphi-Quellcode:
Procedure BASSVIS_PLAY;
//diese Funktion wird exportiert !
begin
case globalkind
of
BASSVISKIND_SONIQUE:
{ nichts zu tun , da es keine Entsprechung für Sonique gibt};
BASSVIS_WINAMP:
BASS_WINAMPVIS_Play(globalHVIS);
BASSVIS_WMP:
BASS_WMPVIS_Play;
end;
end;
:
Procedure BASS_WINAMPVIS_Play(
handle:HVIS);
//wird nicht mehr exportiert !
begin
:
END;
In der Anwendung:
Delphi-Quellcode:
procedure DoxyzClick(Sender:TObject);
begin
if (BASSVIS_INIT(BASSVIS_WINAMP,HInstance,application.handle)) then
BASSVIS_PLAY;
end;
Damit vereinfachst du das Interface deiner
API, ohne eben die komplette Funktionalität neu zu schreiben
Ideal wäre es natürlich, das gleich in der
DLL so zu machen. Damit sparst du dir dann Tipparbeit in den Interface-Deklarationen für die jeweiligen Sprachen