Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.

Commenti

  • Un po più di contesto, ad esempio, di cosa tratta il codice gestito o quanto ce nè, probabilmente ci permetterebbe di darti una risposta migliore.
  • BTW non dovresti portare su un nuovo compilatore, ma su un linguaggio di programmazione più standard (probabilmente lo standard C ++ 14). Quindi passare da g++ a clang dovrebbe essere facile una volta che hai svolto il tuo lavoro.
  • Documentazione Microsoft su C ++ / CLI (Common Language Infrastructure) . Fondamentalmente, niente in C ++ / CLI è portabile. Molte delle librerie della piattaforma sono condivise con C #, quindi il porting dellapplicazione in C # potrebbe essere possibile se il sistema operativo di destinazione è Windows. Lo stesso C ++ / CLI è limitato a Windows su CPU x86 o x64. Il porting a un framework GUI diverso in genere richiede una riprogettazione completa della parte del codice GUI. C ++ / CLI potrebbe utilizzare GUI come: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
  • Il porting del codice GUI a Xamarin (Mono, un ambiente che utilizza il linguaggio C #) potrebbe consentirne lesecuzione su piattaforme diverse da Windows x86 / x64. I dati possono essere passati tra C # e C ++ semplice (che può essere compilato come DLL non gestita su Windows o oggetto condiviso dinamico (.so) su Linux) utilizzando P / Invoke, disponibile sia su Microsoft C # che su Xamarin / Mono.

Rispondi

Quelle chiamate non possono “essere trasferite, almeno non direttamente. gcnew non è una parola chiave C ++, proviene da “C ++ / CLI”, che è una lingua diversa attualmente non supportata da gcc. Questa vecchia domanda SO dice che cera una volta un tentativo di supportarlo, ma sembra essere morto dal 2009.

Lunico modo ragionevole per questo è portare tutto il codice gestito in C ++ standard, quindi gcnew e gcroot non saranno più necessari.

Risposta

Oltre alla risposta di DocBrown “, potresti prendere in considerazione lutilizzo di alcune librerie di Garbage Collector esistenti (ad es. Conservati di Boehm ve GC , o RavenBrook “s MPS , o il tuo GC) nel tuo codice. Vedi anche questo .

Potrebbe non essere facile usare un simile GC (potrebbe non valerne la pena e potresti decidere per utilizzare una vera gestione manuale C ++ e puntatori intelligenti senza alcun GC), e certamente devi essere a conoscenza delle tecniche, dei concetti, della terminologia e delle insidie del GC. Quindi leggi The GC handbook .

Nota che potresti anche considerare lutilizzo di alcune librerie di framework C ++ esistenti, come come Qt o POCO o Boost .

Fondamentalmente dovresti riscrivere il tuo codice in un C ++ più standard (ad esempio, almeno C ++ 14).

Commenti

  • Nota a margine: quando si esegue il porting di codice gestito in unmanaged, il GC mancante molto spesso non è il problema più grande, ammesso che lo sia affatto. Trova un sostituto per le librerie di classi .NET framework utilizzate dal programma è.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *