in der Prakis hat es sich bewährt erstmal die
API möglichst 1:1 nach Pascal zu übersetzen
Alles klar
Allerdings passe ich die Namen der Parameter öfters mal an (mehr Delphi-Style und entferne Prefixe).
Auch Typen passe ich dem Delphi-Style an, so lange es möglich ist, wie z.B. Integer statt INT oder VAR statt Pointer.
Perfekt. Das habe ich auch bereits so gemacht. Typen mit
T
geprefixt, CamelCase Schreibweise und
var
bzw.
const
für Pointer. Zusätzlich habe ich für einige Enums noch Helper Methoden wie z.b.
ToString
implementiert (dafür hat die C-Lib jeweils eine exportierte Funktion).
Ich würde es auch eher 1:1 umsetzen, allein schon wegen der Wartbarkeit und lesbarkeit.
Allerhöchstens wenn A, B, C trivial sind würde ich das in eine
Unit nehmen, aber das wäre meiner Meinung nach etwas schlechter Stil, weil A, B, C sicherlich auch verschiedene Aufgaben haben.
Diese Aufgabentrennung sollte man am Besten auch in Delphi 1:1 abbilden.
Ich werde jetzt wohl den Kompromiss wählen und für jeden C-Header eine .inc Datei erstellen, die ich dann später in einer einzelnen
API Unit zusammenfasse. Dann habe ich die Sachen ordentlich getrennt und man muss hinterher trotzdem nich 15 (Sub-)Units einbinden, damit alle Typen der Lib zur Verfügung stehen. Für die Kapselung in Klassen erstelle ich dann nochmal 3 weitere Units mit den entsprechenden Modulen A, B und C. Dann muss der User unter Delphi immer die
API Unit verwenden und je nach gewünschtem Modulen noch die entsprechende
Unit mit den Wrapperklassen einbinden.
Danke euch allen!
Noch irgendwelche Tipps zum Lösen von Namenskonflikten die auftreten, wenn ich zusätzliche Wrapperklassen schreibe? Habe in C ja meine Context-Structs wie z.b.
MyDecoder
, die ich dann erstmal 1:1 nach Delphi als
TMyDecoder = record
umsetze. Die Wrapperklasse kann ich jetzt natürlich nicht auch
TMyDecoder
nennen. Hier lieben den Namen der Wrapperklasse mutieren (
TMyDecoderWrapper
oder sowas) statt Den des Records? Oder doch liebe den Record umbenennen in z.b.
TMyDecoderStruct
und dafür die High-Level Klasse bei
TMyDecoder
belassen?
Achso und würdet ihr Klassen, Typen, Records, Konstanten, etc. mit dem Namen der Lib prefixen? Mangels Namespaces mache ich das eigentlich ganz gerne in Delphi (auch wenn man Mehrdeutigkeiten natürlich mit explizitem Angeben der
Unit lösen kann - was aber auch irgendwie nichts Ganzes und Halbes ist).