Laden...

portierung von c++ nach c#

Erstellt von lewi vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.960 Views
L
lewi Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren
portierung von c++ nach c#

hallo!

mein problem: ich sollte bereits bestehenden c++ code (eine applikation die hauptsächlich mit der seriellen schnittstelle kommuniziert) auf C# portieren.

arbeite mit visual studio .net.
kann man das in .net irgendwie automatisieren (c++ wurde ebenfalls in .net entwickelt) oder muss ich das von hand machen. bzw. ist es überhaupt möglich den code zu übernehmen (funktioniert der zugriff auf die serielle schnittstelle under C# gleich wie unter c++)?

danke für euere hilfe

N
4.644 Beiträge seit 2004
vor 18 Jahren

Original von lewi
(c++ wurde ebenfalls in .net entwickelt)

Heißt das mit dem VS.NET oder C++/CLI, also managed C++?

C
192 Beiträge seit 2005
vor 18 Jahren

Warum brauchst du das denn? Wenn du c++ unter .NET programmierst kannst du doch das programm problemlos mit anderen c#-programmen zusammenlinken. Dafür macht doch Microsoft soviel werbung also wird das schon funktionieren.

Was willst du denn genau machen?

L
lewi Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

es handelt sich um ein älteres COM objekt von dem ich nur gewisse teile bruache, welche ich aber sowieso zuerst auf meine anforderungen anpassen sollte.

jedoch ist man in der firma am langsamen umstieg auf C#. die applikaiton wird bereits in C# entwickelt.

Da die COM dll veraltet ist und man diese nicht auch in zukunft immer komplizierter auf die aktuellen bedürfnisse anpassen will, steht jetzt die frage im raum, ob man auf das ganze COM verzichten und es schön nach C# portiert, damit auch in 5 jahren man noch was davon hat.

mir ist schon klar, dass es am einfachsten wäre, auch hier das COM objekt weiterzuverwenden, aber irgendwer sollte irgendwann mal einen schritt weiter machen.

zur anderen frage: VS.net

P
939 Beiträge seit 2003
vor 18 Jahren

Die andere Frage ging eher in die Richtung, ob es natives C++ ist oder managed C++, das schon genau wie C# in die IL-Zwischensprache übersetzt wird. Im zweiten Fall hättest du mit einem Decompiler nach C# zurückübersetzen können. Nur für den Einstieg, wahrscheinlich wäre der Code voll von unsafe-Blöcken wo mit Zeigern hantiert wird.

Aber da es um eine COM-Komponente geht, wird es wahrscheinlich natives C++ sein. Das wirst du von Hand übersetzen müssen. Und wahrscheinlich wirst du mit COM-Interop arbeiten müssen. Besonders am Anfang ist das nicht gerade trivial.

Gruss
Pulpapex

C
192 Beiträge seit 2005
vor 18 Jahren

Also ich fürchte, dass die Portierung nicht ganz so leicht wird. c# hat nunmal doch eine andere Syntax wie c++. Ich hab auch als erstes c++ gelernt und dachte dann, dass c# einfach so hoppalahopp ginge. Zu 80% war auch alles bekannt aber dann....
In c# gibt es keine Zeiger (ja es gibt sie schon aber....), die ganze Klassendeklaration ist klein wenig anders. und und und lauter kleine Details

Ihr habt euch ja schon entschieden, das c++ auf c# zu portieren also würde ich an eurer Stelle von vorne beginnen. Vielleicht könnt ihr ja auf die Erfahrungen der alten c++ COM-objekts ein besseres Programm schreiben?

Dann wegen dem Zugriff auf die Serielle Schnittstelle:
Ich habs leider nur einmal kurz gemacht, aber soweit ich mich erinnern kann war es total leicht. Einfach eine Klasse instanziieren, dann kann man da über properties die Stoppbits, die Parität, die Präambel u.s.w. festlegen und dann gibt es so puffer über die man die Zeichen empfangen oder senden kann. Alles über Properties einer Klasse

N
4.644 Beiträge seit 2004
vor 18 Jahren

Original von Pulpapex
Die andere Frage ging eher in die Richtung, ob es natives C++ ist oder managed C

Jep, das meinte ich. War wohl wohl etwas schlecht formuliert. 😉

Wenn ihr eine Neuentwicklung macht, setzt ihr doch bestimmt schon auf 2.0, oder?
Falls ja, dann kannst Du die SerialPort-Komponente nutzen.

L
lewi Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

ich danke euch recht herzlich für die antworten!

da ich leider unter zeitdruck stehe wird sich ein komplettes neuschreiben in c# wohl nicht ausgehen.

wenn ich die COM hülle entferne und dann das assembly in die C# anwendung einbinde, sollte es auch ohne COM gehen (denn das wird eindeutig gewünscht)

kann mir jemand zum thema assembly ein paar links posten bitte.
leider kenne ich mich im .net bereich nicht so sehr aus (bin langjähriger java entwickler)

L
lewi Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

falls es noch jemand interessiert, wie ich es tatsächlich gelöst habe.

nachdem ich mich in die materie von .net und managed/unmanaged C++ eingelesen hatte entschied ich mich für folgende lösung:

Ich erstellte einen Wrapper in managed c++ der den Code des alten unmanaged Code kapselt (die COM Hülle wurde entfernt). Für den Wrapper gibts feine Anleitungen im MSDN und im übrigen netz.

jetzt einfach das assembly in C# odr sonst wo in .net hinzufügen und schon gehts dahin!