Hallo zusammen, ich suche gerade nach einer Möglichkeit um zwischen 2 Codeprojekten, also zwischen 2 Programmiersprachen, Informationen auszutauschen bzw. beiden Projekten zum Zeitpunkt des compilierens die gleichen Informationen bereit zu stellen. Der konkrete Anwendung'sfall ist ein serielles Protokoll, dass zwischen Mikrocontroller, in C++, und Userinterface, in C#, konsistent sein soll, ohne vor jedem Compolieren die Dokumente in beiden Projekten zu händisch zu vergleichen. Im Mikrocontroller werden alle Informationen als Preprozessor defines festgelegt, im Userinterface nutze ich eine Klasse mit nur statischen Membern. Ich hatte bereits folgende Ansätze: 1. C-Datei in C#-Projekt einbinden -> ich habe keine Möglichkeit gefunden 1.1 C-Datei mit einem Hilfsprogramm in C# übersetzen lassen -> war mir ehrlich gesagt zu umständlich 2. Protokoll als XML-Datei erstellen und in beide Projekte einbinden -> ich habe keine Erfahrungen mit XML und wäre hier dankbar für eure Tipps wie man das anstellen könnte. Das müsste ja für den Mikro auch im Preprozessor laufen. Oder kennt einer von euch einen komplett anderen Ansatz um die Datei gleich zu halten? Danke im Voraus für eure Unterstützung.
:
Verschoben durch User
Zwei Codegeneratoren einfachster Art: Denk dir eine Beschreibungssprache aus, zum Beispiel in der Form
1 | # Comment |
2 | [SECTION] |
3 | KEY1=VALUE1 |
Nimm eine simple, einfache Skriptsprache deiner Wahl. Für die Aufgabe reicht zum Beispiel klassisches AWK. Skripte zwei Codegeneratoren. Beide lesen die Beschreibungssprache, einer generiert C++, einer C#. Bau die jeweiligen Codegeneratoren in die jeweiligen Buildsysteme ein. Gesamter Arbeitsaufwand: ca. 1 bis 2 Stunden. Wenn du es richtig langsam, schlecht lesbar, schlecht wartbar, aber modern und web-isch haben möchtest dann nimm XML als Grundlage für die Beschreibungssprache und ein beliebiges unsägliches XML Translation-Tool.
Wie sehen denn die Informationen in den Defines (in C++) und den statischen Members (C#) aus? Sind das nur numerische Konstanten oder etwas Komplizierteres? Wenn die Informationen nicht zu komplex strukturiert sind, lässt sich vielleicht eine Syntax finden, die sowohl der C++- als auch oder C#-Compiler versteht. Das wäre endlich einmal eine sinnvolle Anwendung des polyglottes Programmierens: https://de.wikipedia.org/wiki/Polyglottes_Programm
Jannik schrieb: > ich suche gerade nach einer Möglichkeit um zwischen 2 Codeprojekten, > also zwischen 2 Programmiersprachen, Informationen auszutauschen bzw. > beiden Projekten zum Zeitpunkt des compilierens die gleichen > Informationen bereit zu stellen. Warum? mal ehrlich ich kann verstehen was du vorhast. Aber was hindert dich daran das Serielle Protokoll in C++ zu schreiben und dann beim Compileren des Codes für den Mikrocontroller, eine dll für dein Host zu erzeugen. in deinem C# Programm lädst du dann einfach die C(++)-dll und beide Seiten sprechen defintiv das gleiche Protokoll! Wenn du das Clever machen willst kannst du ja in der dll noch ein paar Versionsnummern einbauen um sicherzugehen das es auch die richtige dll ist. Wenn du das nicht willst musst du dir einen paar code generatoren erzeugen welche aus einer Abstrakten Syntax das Protokoll für alle beteiligen Programmierstprachen übersetzen. Auch das kann beliebig Kompliziert werden und wenn das Protokoll nicht ganz trival ist. Ausserdem holst du dir da einen ganze menge weiter Fehlerquellen ins Projekt.(Fehler in der Beschreibung, Fehler in einen Beteiligten Parser, uneindeutige Syntax, bloaded Code im generierten Module und so weiter)
Vielleicht ist Protocol Buffers etwas für Dich. https://developers.google.com/protocol-buffers/docs/overview
imonbln schrieb: > eine dll für dein Host zu > erzeugen. Eine Möglichkeit. Die andere: Mixed Language Programming. Es war früher völlig üblich, z.B. C und Assembler in Modulen zu verwenden und zusammenzulinken, es kann sowohl C eine Assembler-Funktion aufrufen als auch umgekehrt, das gilt auch für irgendeine andere Kombination. Das scheint aber völlig aus der Mode gekommen zu sein. Zugegebenermassen sind DLLs einfacher, nur hat man dann nicht die eine lauffähige Datei. Georg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.