Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » C++ -> C#

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.02.2008, 18:34 Uhr
Pler
Einer von Vielen
(Operator)


Hi Leute!

Ich überlege, ob es sinnvoll ist ein Projekt von C++ zu C# zu portieren.
Vorteile wären die meiner Meinung nach einfachere Entwicklung, die höhere Sicherheit (im Sinne von Speicher etc.) und vor allem gibt's noch ne C#-GUI, die auf das Projekt aufsetzt. Die Zusammenarbeit zwischen Lib und GUI wäre also einfacher.

Nachteil wäre natürlich daß Arbeitszeit beim Umschreiben drauf geht. Ich denke aber, daß man das später wieder rausholen kann. (Projekt geht immer weiter)

Angst habe ich davor, daß das ganze zu langsam wird. Da ich da aber keine Erfahung habe, brauche ich eure Hilfe. Das Programm rechnet hauptsächlich auf einer Unmenge Zahlen rum. Dazu müssen teilweise sehr große Dateien (viele MB. Richtwert 10 bis mehrere hundert) eingelesen werden. Dann werden diese Daten verarbeitet und schließlich wieder rausgeschrieben. Zurzeit kann das locker mal ne halbe Stunde dauern. Aber auch noch längere Zeiten sind bei entsprechenden Anwendungen denkbar.

Also:
C++ lassen oder in C# portieren?


Vielen Dank schon mal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.02.2008, 19:05 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Lass doch die Lib in C++ und bau nur eine C#-GUI dazu... C++ kann bei Bedarf auch nach .NET compiliert werden -> Speichersicherheit und Zugriff von C# aus. Ganz umschreiben wuerde ich das nicht, geht zu viel Portabilitaet verloren...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.02.2008, 19:19 Uhr
Pler
Einer von Vielen
(Operator)



Zitat:
C++ kann bei Bedarf auch nach .NET compiliert werden -> Speichersicherheit und Zugriff von C# aus.
Was meinst du damit? Davon hab ich noch nie was gehört. Klingt aber sehr interessant.

Zitat:
Ganz umschreiben wuerde ich das nicht, geht zu viel Portabilitaet verloren...
Naja, weiß nicht. Dank Mono läuft das dann ja auf ziemlich vielen Systemen.

Ich habe ja auch die Schnittstelle zw. C# und C++ angesprochen. Vielleicht ist das zurzeit nicht gerade optimal. Kennt da jmd. gute Quellen, Hinweise zu?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.02.2008, 14:11 Uhr
ao

(Operator)



Zitat von pler:
Vorteile wären die meiner Meinung nach einfachere Entwicklung, die höhere Sicherheit (im Sinne von Speicher etc.) und vor allem gibt's noch ne C#-GUI, die auf das Projekt aufsetzt. Die Zusammenarbeit zwischen Lib und GUI wäre also einfacher.

Nachteil wäre natürlich daß Arbeitszeit beim Umschreiben drauf geht. Ich denke aber, daß man das später wieder rausholen kann. (Projekt geht immer weiter)

Angst habe ich davor, daß das ganze zu langsam wird.


Das "Projekt", von dem du sprichst, ist die Library, die von der C#-GUI bedient werden soll? Und die ist bisher mit was geschrieben? Standard-C++? MFC? COM? Was anderes?

Womit wird die Lib denn zur Zeit bedient? Mit einer alten C++-GUI? Kann die abgesägt werden, wenn die neue lauffähig ist?

Eine "dumme" 1:1-Übersetzung von C++ nach C# bringt wenig, wenn man dabei alle alten Fehler wiederholt.

Arbeitet euch in C# ein, bis ihr wisst, welche Vorzüge die Sprache bringt (es sind einige). Lernt das .NET-Framework kennen, da ist viel viel nützlicher Kram drin, nicht nur abgerundete Buttons und mehrfarbige Comboboxen, das kann weit mehr.

Wer sich im Framework auskennt und die Möglichkeiten konsequent nutzt, der kann 1. rasend schnell implementieren und braucht 2. praktisch keine weiteren Bibliotheken, außer für sehr spezielle Dinge (z.B. Signalverarbeitung oder Statistik, oder für ganz ausgefuchste Controls). Wer bisher nur C++ kennt und sich an allen Ecken Toolboxen zusammengesucht hat: Vergesst das, das braucht ihr nicht mehr. Wenn ihr Java kennt, wisst ihr ungefähr, in welcher Liga C#/.NET spielt.

Wenn ihr die neue Umgebung kennengelernt habt, dann macht ein genaues Design-Review von eurem Projekt. Was stört am alten Aufbau, was sollte man besser machen und wie würde es in C#/.NET gehen?

Wenn ihr diese Pläne habt, dann fragt euch, ob die Vorteile den Aufwand rechtfertigen. Nicht früher. Macht euch nichts vor - die Entscheidung, ob portiert wird oder nicht, kann leicht ein, zwei Mannmonate verschlingen, auch mehr, wenn eine größere Zahl Leute beteiligt ist. Aber nur so wird es eine fundierte Entscheidung.

Hier bei uns haben bis 2004 rund 16 Entwickler viel C++ (COM-Server) und ein bisschen Visual Basic gemacht. Mit dem Erscheinen von Visual Studio 2005 Beta begannen einige den Test mit C#, und inzwischen sind fast alle umgestiegen, und zwar mit voller Überzeugung, es gibt keinen, der der alten Welt nachtrauert. Und ich würde sagen, das Entwicklungstempo hat sich insgesamt verdoppelt, bei gesteigerter Codequalität (Dokumentation, Klarheit der Schnittstellen, Fehlerhäufigkeit).

Wir haben es geschafft, unsere alten COM-Bibliotheken in Interop-Assemblies zu verpacken, so dass sie nicht verloren sind. Auch das hat Zeit gekostet, bis es richtig funktionierte, mit Deployment und allem. Trotzdem war die Entscheidung 100 % richtig.

Ich will nicht sagen, dass das auf euch 1:1 übertragbar sein muss. Aber die Vorteile einer modernen Plattform sind größer als man im ersten Anblick meint. Ihr solltet es "wohlwollend" prüfen.

Zu deinen Sorgen, was Geschwindigkeit angeht: Ich glaube, die C#/.NET-Designer haben aus den Schwächen von Java gelernt. Es gibt (neben der "hohen" Ebene) Möglichkeiten, auf "tiefer" Ebene C++-ähnlich zu programmieren - wenn es denn sein wirklich muss. Performance ist eine Frage des Designs, nicht der Programmiersprache. Auch das könnte ich mit Erfahrungen aus dem Nachbarbüro belegen - darf ich aber nicht

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.02.2008, 17:58 Uhr
Pler
Einer von Vielen
(Operator)


Ja, das ist eine Library, die ausschließlich in Standard-C++ geschrieben ist. Es gab dazu mal eine (etwas einfachere MFC-GUI, also Visual C++ und so). Die wurde aber verworfen. Nun gibt es eine recht schöne und viel komplexere C#-WinForms-Gui dazu.

Die Schnittstelle besteht aus C-Funktionen. ganz einfache C-Funktionen. Keine Ahnung wie das so richtig von C#-Seite funktioniert. Vereinfacht kann man sagen, daß es innerhalb der C-Funktionen dann von der Lib ein einziges Objekt gibt.

Wie gesagt, ich kenne mich mit C# kaum aus. Ich habe mir nur mal den Guide to C# angeschaut (eher überflogen) und fand das ganz cool. Mit dem ganzen Framework und so hörts dann aber auf. Die Frage wäre allerdings, inwiefern ich das überhaupt nutzen kann. Wohl eher weniger.

Naja, fürs erste bin ich mal überzeugt, die Lib in C++ zu lassen. Ein Umbau auf die Schnelle würde am Ende nicht genug bringen. Da habt ihr recht. Vielleicht später noch mal drüber nachdenken, wenn man dann die ganzen Fehler schon gemacht hat, die jetzt noch kommen :-D
Und dann wirklich drüber nachdenken und genauer durchplanen.
("Eine "dumme" 1:1-Übersetzung von C++ nach C# bringt wenig, wenn man dabei alle alten Fehler wiederholt. ")
Aber auch die Portabilität ist nicht ganz unwichtig. Zurzeit wäre es ein geringer Aufwand das ganze auch als Kommandozeilenprogramm auszuführen. Dann siehts mit C++ natürlich gut aus. Würde dann so ziemlich überall laufen.

So groß ist das Projekt übrigens nicht wie du (ao) jetzt vielleicht meinst. Im Prinzip sinds grad mal zwei Mann in Teil-Teil-Zeit.
Aber es sind doch schon so einige Stunden reingeflossen.

Die Entscheidung für C++-Lib und C#-Gui ist übrigens weniger aus großen Überlegungen entstanden, sondern fürs erste eher historisch bedingt. Ansonsten nimmt man natürlich immer erst mal das, was man grad (mehr oder weniger) kann.

Kurzfristig wäre vielleicht die Schnittstelle zu verbessern.

Vielen Dank schon mal! :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.02.2008, 19:13 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Visual C++ kann C++-Quellcode problemlos fuer .NET compilieren; alles, was noch fehlt, ist z.B. eine Schnittstelle, die z.B. zwischen STL-Strings und System::String hin-und-her-konvertiert. Dann kann die Assembly direkt von C# aus angesprochen werden.

Alternativ gibt es soweit ich weiss eine Moeglichkeit, von C# aus ganz normale C-DLLs anzusprechen; wenn die DLL eh schon ein C-style-Interface hat, waere das IMO der einfachste Weg. Frag mich aber nicht nach den genauen Details, meine Zeit als Windows-Entwickler und damit .NET ist inzwischen eine Weile her...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.02.2008, 21:17 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab so ein bisschen die Vermutung, dass es deutlich einfacher sein dürfte, C++/CLI-Module mit C# zu verbinden. C++/CLI ist eklig, das ist schon richtig, aber C++ und .net passen ja auch nicht besonders gut zusammen; um ein paar Abstriche kommt man nicht herum. (Die Kompilierung von C++-Code für .net, die Bruder Leif da erwähnt, ist alles andere als problemlos)

Dann dürfte das ganze im Grunde nur noch darauf hinauslaufen, ein paar Stub-Funktionen zu schreiben, die die .net-Objekte pinnen (damit sie der GC dir nicht unter der Nase wegschaufelt), die Daten da rausziehen, der DLL übergeben und die Ergebnisse zurückschreiben - im Grunde vergleichbar mit JNI für Java, nur in einer Datei.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: