Forum: PC-Programmierung Informationen zwischen Codeprojekt, VOR dem compilieren austauschen


von Jannik (Gast)


Lesenswert?

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
von Mark (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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

von imonbln (Gast)


Lesenswert?

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)

von Tom (Gast)


Lesenswert?

Vielleicht ist Protocol Buffers etwas für Dich.
https://developers.google.com/protocol-buffers/docs/overview

von georg (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.