Nehmen Sie zunächst Ihren nativen C++ - Quellcode und kompilieren Sie ihn als C++/CLI. Sie werden schreckliche Ergebnisse bekommen. Zweitens sollten Sie Ihren nativen C++ - Code nicht verwenden und versuchen, ihn in C# zu übersetzen, während Sie gleichzeitig Orte für die Verwendung der Basisklassenbibliotheken, die Änderung der Datenzugriffsmethode und die Anpassung des UI-Paradigmas von MFC an WPF beachten. Sie werden eine Menge Energie ausgeben, um im besten Fall das zu produzieren, was Sie vorher hatten.
Verwenden Sie stattdessen Ihren nativen C++ - Code und refactorisieren Sie ihn so, dass Sie eine oder mehrere "Business Logic" -Bibliotheken haben. Wenn diese bereits vorhanden sind, könnten sie COM-Schnittstellen haben, sie könnten einige "extern C" -Funktionen offenlegen, oder sie könnten einige C++ - Instanzmethoden offenlegen. Keine Bange. Wenn sie nicht bereits existieren, haben Sie zwei Möglichkeiten. Wenn es nur eine Handvoll Methoden gibt, die von der Präsentationsschicht benötigt werden, und sie einfache Dinge wie Zeichenketten verwenden, fügen Sie einige "extern C" -Funktionen als Schnittstelle zur Geschäftslogik hinzu. Jetzt können Sie diese über die verwaltete Benutzerschnittstelle (VB oder C#, Windows Forms oder WPF, was auch immer) mit P/Invoke aufrufen. Wenn es eine Menge gibt und Sie diese organisieren möchten oder wenn sie komplexe Strukturen oder Objekte benötigen, schreiben Sie eine C++/CLI-Klasse oder Klassen, die mit den nativen C++ - Klassen kommunizieren können, während "public ref class" -Klassen offengelegt werden auf die verwaltete Benutzeroberfläche. Das C++/CLI wird die Marshalling- und Lifetime-Probleme vereinfachen.
Für Ihre neue Benutzeroberfläche schreiben Sie sie von Grund auf neu und rufen Sie wo erforderlich in die Geschäftslogik auf. Verwenden Sie die alte Benutzeroberfläche nur als Anleitung für die benötigten Funktionen und für Validierungen. Verwenden Sie das "Look and Feel" Ihrer neuen UI-Technologie (WPF oder was auch immer), um die Benutzeroberfläche selbst zu erstellen, und versuchen Sie nicht, eine mechanische Konvertierung durchzuführen. Sie werden am Ende Pixel jagen und härter arbeiten, als Sie brauchen, wenn Sie zu sehr an der alten Benutzeroberfläche festhalten. Alte App hatte 3 Tasten und eine Checkbox? Großartig, 3 WPF-Tasten und ein WPF-Looking Check-Box kommt auf. Wechseln Sie lieber zu einem Farbband, während Sie die Änderung vornehmen? Fein. Es ist in Ordnung, anders auszusehen, wenn Sie fertig sind.
Dann stellen Sie Ihre nativen Business-Logikbibliotheken bereit, die immer noch als systemeigener Code kompiliert sind, Ihren C++/CLI-Wrapper, falls Sie einen haben, und Ihre verwaltete UI. Dies funktioniert für alles außer dem Telefon.
Ich muss nur noch einmal sagen bitte portieren Sie nicht Ihre Arbeit native C++ Business Logik in C# als Teil der Anfangsphase des Projekts. Wenn es fertig ist und funktioniert, wenn Sie einen guten Geschäftsgrund haben (wie wir kein Geld mehr für C++ - Entwickler ausgeben wollen), dann können Sie darüber nachdenken. Aber zuerst funktioniert es mit Interop. Das hat den Vorteil, dass wenn Ihre Übersetzung die delikate Geschäftslogik von Leuten, die nicht mehr bei Ihnen sind, durchlesen und sich auf C++ Feinheiten verlassen, die Ihr aktuelles Team nicht kennt, können Sie für den Rest Ihrer Tage auf die verpackten Bibliotheken zurückgreifen.
@all: Weitere Details über meine VC++ Produkte, dieses Produkt besteht die meisten von COM mit Objective C basierte OOPs Konzepte implementiert, das ist fast 17 Jahre Entwicklungsprodukt. Was im Wesentlichen viel Code mit vielen Komponenten bedeutet. Kürzlich bat mich mein Kunde, einen Vorschlag zu machen, dieses gesamte Produkt und seine Funktionalität mit einem anderen .NET-Produkt zusammenzuführen und diese Funktionen zu verbessern. – KSH
@all: Dies zwang uns, über einen Ansatz nachzudenken, um das Problem anzugehen. Planen der Identifizierung einzelner COMs oder DLLs in VC++, die direkt/über Wrapper in .NET verwendet werden können. Planen Sie, diese Module nur bei Bedarf zu berühren. Abgesehen von der Planung, komplette UI mit neuen Framework-Elementen neu zu schreiben. Weitere Vorschläge zu UI/Code/Konzepten würden helfen, mehr Wissen zu erlangen. – KSH