Lukket. Dette spørgsmål er uden for emnet . Det accepteres i øjeblikket ikke svar.

Kommentarer

  • Lidt mere kontekst, for eksempel hvad den administrerede kode handler om, eller hvor meget der er af det, vil sandsynligvis give os mulighed for at give dig et bedre svar.
  • BTW bør du ikke porte til en ny compiler, men til et mere standard programmeringssprog (sandsynligvis standard C ++ 14). Så det skal være let at skifte fra g++ til clang.
  • Microsoft-dokumentation om C ++ / CLI (fælles sproginfrastruktur) . Dybest set er intet i C ++ / CLI bærbart. Mange af platformbibliotekerne deles med C #, så det kan være muligt at porte applikationen til C #, hvis mål-OS er Windows. C ++ / CLI i sig selv er begrænset til Windows på x86- eller x64-CPUer. Portering til en anden GUI-ramme kræver typisk komplet omarkitektur af GUI-delen af koden. C ++ / CLI bruger muligvis GUI såsom: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
  • Portering af GUI-koden til Xamarin (Mono, et miljø, der bruger C # sprog) lad det køre på andre platforme end Windows x86 / x64. Data kan overføres mellem C # og almindelig C ++ (som kan kompileres som ikke-administreret DLL på Windows eller dynamisk delt objekt (.so) på Linux) ved hjælp af P / Invoke, tilgængelig på både Microsoft C # og Xamarin / Mono.

Svar

Disse opkald kan ikke overføres, i det mindste ikke direkte. gcnew er ikke et C ++ nøgleord, det er fra “C ++ / CLI”, som er et andet sprog, der i øjeblikket ikke understøttes af gcc. Dette ældre SO-spørgsmål siger, at der var en gang et forsøg på at støtte det, men det ser ud til at være død siden 2009.

Den eneste rimelige måde for dette er at porte hele den administrerede kode til standard C ++, derefter gcnew og gcroot behøves ikke mere.

Svar

Ud over DocBrowns svar , kan du overveje at bruge noget eksisterende affaldssamlerbibliotek (f.eks. Boehms conservati ve GC , eller RavenBrook “s MPS eller din egen GC) i din kode. Se også dette .

Det er måske ikke let at bruge en sådan GC (det er måske ikke engang værd at smerte, og du kan beslutte at bruge ægte C ++ manuel styring og smarte pointer uden GC), og du skal bestemt være opmærksom på GC-teknikker, koncepter, terminologi og faldgruber. Så læs GC-håndbogen .

Bemærk, at du måske også overvejer at bruge nogle eksisterende C ++ rammebiblioteker, f.eks. som Qt eller POCO eller Boost .

Du skal grundlæggende omskrive din kode til mere standard C ++ (f.eks. mindst C ++ 14).

Kommentarer

  • Sidebemærkning: Når du porterer administreret kode til ikke-administreret, er den manglende GC ofte ikke det største problem, hvis det overhovedet er et problem. Find en erstatning for .NET framework-klassebiblioteker, der bruges af programmet, er.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *