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
Original von lewi
(c++ wurde ebenfalls in .net entwickelt)
Heißt das mit dem VS.NET oder C++/CLI, also managed C++?
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?
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
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
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
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.
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)
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!