<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Lite mer sammanhang, till exempel vad den hanterade koden handlar om, eller hur mycket det finns av det, skulle förmodligen tillåta oss att ge dig ett bättre svar.
  • BTW ska du inte porta till en ny kompilator utan till ett mer standardiserat programmeringsspråk (förmodligen standard C ++ 14). Så att byta från g++ till clang borde vara enkelt när du gjorde ditt jobb.
  • Microsofts dokumentation på C ++ / CLI (Common Language Infrastructure) . I grund och botten är inget i C ++ / CLI bärbart. Många av plattformsbiblioteken delas med C #, så det kan vara möjligt att överföra applikationen till C # om mål-OS är Windows. C ++ / CLI i sig är begränsad till Windows på x86- eller x64-processorer. Att portera till ett annat GUI-ramverk kräver vanligtvis fullständig omarkitektur av GUI-delen av koden. C ++ / CLI kan använda GUI som: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
  • Att portera GUI-koden till Xamarin (Mono, en miljö som använder C # -språk) kan tillåt att den körs på andra plattformar än Windows x86 / x64. Data kan överföras mellan C # och vanlig C ++ (som kan kompileras som ohanterad DLL på Windows eller dynamiskt delat objekt (.so) på Linux) med P / Invoke, tillgängligt på både Microsoft C # och Xamarin / Mono.

Svar

Dessa samtal kan inte överföras, åtminstone inte direkt. gcnew är inte ett C ++ – nyckelord, det är från ”C ++ / CLI”, vilket är ett annat språk som för närvarande inte stöds av gcc. Denna äldre SO-fråga säger att det fanns en gång ett försök att stödja det, men det verkar vara dött sedan 2009.

Det enda rimliga sättet för detta är att porta hela den hanterade koden till standard C ++, sedan gcnew och gcroot behövs inte längre.

Svar

Förutom DocBrowns svar kan du överväga att använda ett befintligt skräpsamlingsbibliotek (t.ex. Boehms konservati ve GC , eller RavenBrooks MPS , eller din egen GC) i din kod. Se även detta .

Det kanske inte är lätt att använda en sådan GC (det kanske inte ens är värt smärtan, och du kan bestämma att använda äkta C ++ manuell hantering och smarta pekare utan GC), och du måste verkligen vara medveten om GC-tekniker, koncept, terminologi och fallgropar. Så läs GC-handboken .

Observera att du också kan överväga att använda några befintliga C ++ rambibliotek, t.ex. som Qt eller POCO eller Boost .

Du bör i princip skriva om din kod till mer standard C ++ (t.ex. C ++ 14 åtminstone).

Kommentarer

  • Sidanot: när man överför hanterad kod till ohanterad är den saknade GC oftast inte det största problemet, om det alls är ett problem. Hitta en ersättning för .NET-ramklassbiblioteken som används av programmet är.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *