Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#25

Re: Neustrukturierung einer DLL

  Alt 7. Jul 2007, 05:02
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
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat