Ich schreibe eine NON-GUI-Anwendung, die plattformübergreifend zwischen OS X und Windows funktionieren soll. Ich betrachte die folgende Architektur, weiß aber nicht, ob sie auf der Windows-Seite funktionieren wird:
(Plattformspezifischer Einstiegspunkt) -> ANSI C-Hauptschleife => ANSI C-Modellcode für Datenverarbeitung/Logik => (Plattformspezifische Hilfsprogramme)
Der Hauptteil, den ich in regulärem ANSI C schreiben möchte, weil A) er unabhängig von der Plattform sein sollte, B) ich sehr vertraut mit C bin, C) er die Aufgabe erledigen kann und das gut
(Plattformspezifischer Einstiegspunkt) kann in allem geschrieben werden, was notwendig ist, um die Aufgabe zu erledigen, das ist eine kleine Menge Code, spielt für mich keine Rolle.
(Plattformspezifische Helfer) sind knifflig. Das sind Dinge wie das Parsen von XML, der Zugriff auf Datenbanken, Grafikwerkzeug-Stuff, was auch immer. Dinge, die in C nicht einfach sind. Dinge, die moderne Sprachen/Frameworks kostenlos zur Verfügung stellen. Auf OS X wird dieser Code in Objective-C geschrieben, der mit Cocoa interagiert. Auf Windows denke ich, dass mein bester Einsatz C# ist
Also sieht meine Architektur auf Windows (vereinfacht) so aus
(C# oder C?) -> ANSI C -> C#
Ist das möglich? Einige Gedanken/Vorschläge bisher..
1) Mein C-Core als .dll kompilieren -- das ist in Ordnung, aber es scheint keine Möglichkeit zu geben, meine C#-Helfer aufzurufen, es sei denn, ich kann irgendwie Funktionszeiger erhalten und sie an meinen Kern übergeben, aber das scheint unwahrscheinlich
2) Ein C .exe und ein C# .exe kompilieren und sie über gemeinsamen Speicher oder eine Art IPC kommunizieren lassen. Ich bin dem nicht vollständig abgeneigt, aber es bringt offensichtlich viel Komplexität mit sich, daher scheint es nicht ideal zu sein
3) Anstatt C# zu verwenden, C++ benutzen, das bringt mir einige schöne Datenverwaltungsfunktionen und schönen Hilfscode. Und ich kann es ziemlich einfach mischen. Und die Arbeit, die ich leiste, könnte wahrscheinlich leicht auf Linux portiert werden. Aber ich mag C++ wirklich nicht, und ich möchte nicht, dass es zu einem Fest von Drittanbieter-Bibliotheken wird. Nicht dass es ein großes Problem ist, aber es ist 2010.. alles für die grundlegende Datenverwaltung sollte eingebaut sein. Und die Ausrichtung auf Linux ist wirklich keine Priorität.
Beachten Sie, dass keine "totalen" Alternativen akzeptabel sind, wie in anderen ähnlichen Fragen auf SO vorgeschlagen; Java, RealBasic, Mono.. diese Anwendung ist extrem leistungsintensiv und erfordert Soft-Realtime für Spiel-/Simulationszwecke, hier brauche ich C & Co, um es richtig zu machen (vielleicht Sie nicht, aber ich schon)