Der Nachteil einer Enumeration ist das bei Delphi nur ein Byte fuer den Typ genommen wird, waehrend C 4 Bytes nimmt. Bleibt man bei einfachen Konstanten und nimmt Integer als Typ fuer den Parameter so erspart man sich die Probleme mit der Groesse des Typs.
Es heisst uebrigens in englisch nicht "type" sondern "kind" (Art). Das ist ein beliebter Fehler bei der Namensgebung.
Delphi-Quellcode:
const
BASSVISKIND_SONIQUE = 1;
BASSVISKIND_WINAMP = 2;
BASSVISKIND_WMP = 3;
type
BASSVIS_KIND_T = Integer;
Code:
#define BASSVIS_SONIQUE 1
#define BASSVIS_WINAMP 2
#define BASSVIS_WMP 3
typedef int BASSVIS_KIND_T;
Zur Abstraktion sollte man uebrigens alles mit eigenen Typen versehen. Das bewirkt das die Programme in allen Sprachen aehnlicher aussehen. Die jeweilige Header-Datei mappt dann die Typen auf passende Basistypen.
So jetzt zu der Idee des Supersets. Die APIs haben nicht so viel Ueberschneidung. Das sollte man erst mal aufarbeiten.
Ein Beispiel waere dies:
Delphi-Quellcode:
procedure BASSVIS_Play(Kind: BASSVIS_KIND_T;
Handle: HVIS);
stdcall;
begin
case Kind
of
BASSVISKIND_SONIQUE:
{ nichts zu tun };
BASSVIS_WINAMP:
BASS_WINAMPVIS_Play(
Handle);
BASSVIS_WMP:
BASS_WMPVIS_Play;
end;
end;
Das ist jetzt nur die grobe Richtung in der es gehen soll. Das
API muss noch deutlich vereinheitlicht werden.