C Sandbox und C# GUI

31/03/2008 - 22:28 von Timo Engelmann | Report spam
Hallo Zusammen,

ich bin gerade dabei einen Weg zu finden C Code, der normalerweise auf
einem Mikrocontroller làuft (ohne Hardware spezifische Aufrufe, also
alles Ansi C) wàhrend der Entwicklung auf dem PC laufen zu lassen und
dort auch zu debuggen.

Die Idee ist eine Art Sandbox, also eine Umgebung, in die der Zielcode
eingebettet werden kann. Diese Umgebung soll alle Funktionen
nachbilden, auf die der Zielcode zugreift. Außerdem stelle ich mir
eine GUI in C# vor, über die der Zielcode Eingangsdaten erhàlt und
Ausgangsdaten visualisiert werden können.

Da der Zielcode auf dem Mikrocontroller in einem Multitasking OS làuft
muss der Zielcode auch in der Sandbox zyklisch getriggert werden
können.

Nun stellt sich für mich die Frage wie der richtige Weg zum Ziel
beginnt. Am liebsten wàre es mir natürlich, wenn ich beides, sowohl
Zielcode als auch GUI, in einem Visual Studio Projekt entwickeln und
debuggen könnte.

Auch wie die Kommunikation zwischen C-Sandbox und C#-GUI aussehen
könnte ist mir bisher nur schemenhaft klar. Ich gehe davon aus, dass
COM das richtige Schlagwort ist. Was meint Ihr? Wenn COM der richtige
Weg ist, kennt jemand ein gutes Beispiel wie COM in VC++ implementiert
wird und man dann mit C# darauf zugreift.

Ich weiß, viele Fragen, ich werde da wohl noch einige Stunden im Web
suchen müssen, bin trotzdem für jeden Tipp dankbar!.

Liebe Grüße Timo
 

Lesen sie die antworten

#1 Thomas Scheidegger
31/03/2008 - 22:59 | Warnen spam
Hallo Timo

Am liebsten wàre es mir natürlich, wenn ich beides, sowohl
Zielcode als auch GUI, in einem Visual Studio Projekt entwickeln und
debuggen könnte.




in einem C#-Projekt kann man C/C++ Source nicht direkt einbinden.
Aber ein C++/CLI-Projekt (ab VS2005) in dieselbe
Projektmappe (Solution) wie C# aufnehmen und Projekt-Verweise erstellen...

In C++/CLI kann man 'managed C++' und 'unmanaged C++' mischen,
vielfach oft sogar nahtlos (IJW-Interop).
<URL:http://msdn2.microsoft.com/en-us/ma...1.aspx>

Umschaltung zB: #pragma unmanaged|managed
<URL:http://msdn2.microsoft.com/en-us/li...e.aspx>


Also schlussendlich:
Den Ansi-C Source in einem C++/CLI-Wrapper einpacken,
dann kann man aus C# diesen Wrapper 'nahtlos' ansprechen.
Durchgehendes Debugging möglich.

Habe ich schon mehrfach gemacht,
auch C-Source für einen ARM-Microcontroller (GNU GCC, Ansi C).
Wenn ordentlich geschrieben, scheint dieser mit VC++ 2005/2008 relativ
kompatibel.

Tipp: investiere genug (Lern-)Zeit in das Design der Schnittstellen
zwischen unmanaged<>managed<>C#.

Alternative:
allen C-Code in eine klassische Win32-DLL mit APIs,
dann in C# PInvoke (dllimport).



COM-Interop würde ich heute nur noch nehmen,
wenn du COM (= C++/Win32) schon kennst
und im Projekt sonst schon verwendet wird.







Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen