Gesloten. Deze vraag is off-topic . Het accepteert momenteel geen antwoorden.

Reacties

  • Een beetje meer context, bijvoorbeeld waar de beheerde code over gaat, of hoeveel er van is, zou ons waarschijnlijk in staat stellen om je te geven een beter antwoord.
  • Je zou trouwens niet moeten porten naar een nieuwe compiler, maar naar een meer standaard programmeertaal (waarschijnlijk standaard C ++ 14). Dus overschakelen van g++ naar clang zou gemakkelijk moeten zijn als je eenmaal je werk hebt gedaan.
  • Microsoft-documentatie over C ++ / CLI (Common Language Infrastructure) . In principe is niets in C ++ / CLI draagbaar. Veel van de platformbibliotheken worden gedeeld met C #, dus het is mogelijk dat de applicatie naar C # kan worden overgezet als het doel-besturingssysteem Windows is. C ++ / CLI zelf is beperkt tot Windows op x86- of x64-CPUs. Porteren naar een ander GUI-framework vereist doorgaans een volledige herarchitectuur van het GUI-gedeelte van de code. C ++ / CLI kan GUI gebruiken zoals: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
  • Het porten van de GUI-code naar Xamarin (Mono, een omgeving die de C # -taal gebruikt) laat het draaien op andere platforms dan Windows x86 / x64. Gegevens kunnen worden doorgegeven tussen C # en gewone C ++ (die kan worden gecompileerd als onbeheerde DLL op Windows of dynamisch gedeeld object (.so) op Linux) met behulp van P / Invoke, beschikbaar op zowel Microsoft C # als Xamarin / Mono.

Answer

Die oproepen kunnen “niet worden overgedragen, althans niet rechtstreeks. gcnew is geen C ++ sleutelwoord, het is van “C ++ / CLI”, wat een andere taal is die momenteel niet wordt ondersteund door gcc. Deze oudere SO-vraag zegt dat er was ooit een poging om het te ondersteunen, maar het lijkt sinds 2009 dood te zijn.

De enige redelijke manier hiervoor is om alle beheerde code over te zetten naar standaard C ++, en vervolgens gcnew en gcroot zullen “niet meer nodig zijn.

Antwoord

Naast het antwoord van DocBrown “s antwoord , zou je kunnen overwegen om een bestaande garbage collector-bibliotheek te gebruiken (bijv. Boehm “s conservati ve GC , of RavenBrooks MPS , of uw eigen GC) in uw code. Zie ook dit .

Het is misschien niet gemakkelijk om zon GC te gebruiken (het is misschien niet eens de moeite waard, en je zou kunnen beslissen om echt C ++ handmatig beheer en slimme aanwijzingen te gebruiken zonder enige GC), en je moet zeker op de hoogte zijn van GC-technieken, concepten, terminologie en valkuilen. Dus lees Het GC-handboek .

Merk op dat u ook zou kunnen overwegen om enkele bestaande C ++ frameworkbibliotheken te gebruiken, zoals als Qt of POCO of Boost .

Je zou in principe je code moeten herschrijven naar meer standaard C ++ (bijvoorbeeld C ++ 14 tenminste).

Reacties

  • Kanttekening: bij het porten van beheerde code naar onbeheerde code is de ontbrekende GC meestal niet het grootste probleem, als het al een probleem is. Een vervanging voor de .NET Framework-klassebibliotheken die door het programma worden gebruikt, is.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *