Kommentare
- Ein bisschen mehr Kontext, zum Beispiel, worum es im verwalteten Code geht oder wie viel davon vorhanden ist, würde es uns wahrscheinlich ermöglichen, Ihnen zu geben eine bessere Antwort.
- Übrigens sollten Sie nicht auf einen neuen Compiler portieren, sondern auf eine Standardprogrammiersprache (wahrscheinlich Standard C ++ 14). Der Wechsel von
g++
zuclang
sollte daher nach Abschluss Ihrer Arbeit einfach sein. - Microsoft-Dokumentation zu C ++ / CLI (Common Language Infrastructure) . Grundsätzlich ist nichts in C ++ / CLI portabel. Viele der Plattformbibliotheken werden für C # freigegeben, sodass die Portierung der Anwendung auf C # möglicherweise möglich ist, wenn das Zielbetriebssystem Windows ist. C ++ / CLI selbst ist auf Windows auf x86- oder x64-CPUs beschränkt. Das Portieren auf ein anderes GUI-Framework erfordert normalerweise eine vollständige Neuarchitektur des GUI-Teils des Codes. In C ++ / CLI wird möglicherweise eine GUI verwendet, z. B.: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
- Portieren des GUI-Codes nach Xamarin (Mono, eine Umgebung, die C # -Sprache verwendet) Lassen Sie es auf anderen Plattformen als Windows x86 / x64 laufen. Daten können zwischen C # und einfachem C ++ (das unter Windows als nicht verwaltete DLL oder unter Linux als dynamisches freigegebenes Objekt (.so) kompiliert werden kann) mithilfe von P / Invoke übertragen werden, das sowohl unter Microsoft C # als auch unter Xamarin / Mono verfügbar ist.
Antwort
Diese Anrufe können zumindest nicht direkt portiert werden. gcnew
ist kein C ++ – Schlüsselwort, sondern stammt aus „C ++ / CLI“, einer anderen Sprache, die derzeit von gcc nicht unterstützt wird. Diese ältere SO-Frage gibt an, dass dies der Fall war einmal ein Versuch, es zu unterstützen, aber es scheint seit 2009 tot zu sein.
Der einzig vernünftige Weg dafür besteht darin, den gesamten verwalteten Code auf Standard-C ++ zu portieren, dann gcnew
und gcroot
werden nicht mehr benötigt.
Antwort
Zusätzlich zur Antwort von DocBrown können Sie eine vorhandene Garbage Collector-Bibliothek verwenden (z. B. Böhms Konservati ve GC oder RavenBrooks MPS oder Ihr eigener GC) in Ihrem Code. Siehe auch this .
Es ist möglicherweise nicht einfach, einen solchen GC zu verwenden (es ist möglicherweise nicht einmal den Schmerz wert, und Sie können sich entscheiden Um eine echte manuelle C ++ – Verwaltung und intelligente Zeiger ohne GC zu verwenden, müssen Sie sich der GC-Techniken, -Konzepte, -Terminologie und der Fallstricke bewusst sein. Lesen Sie daher Das GC-Handbuch .
Beachten Sie, dass Sie möglicherweise auch einige vorhandene C ++ – Framework-Bibliotheken verwenden, z als Qt oder POCO oder Boost .
Grundsätzlich sollten Sie Ihren Code in Standard-C ++ umschreiben (z. B. mindestens C ++ 14).
Kommentare
- Randnotiz: Beim Portieren von verwaltetem Code auf nicht verwalteten Code ist der fehlende GC meistens nicht das größte Problem, wenn überhaupt. Einen Ersatz für die vom Programm verwendeten .NET Framework-Klassenbibliotheken finden Sie unter.