Fechada. Esta pergunta está fora do tópico . Atualmente não está aceitando respostas.

Comentários

  • Um pouco mais de contexto, por exemplo, sobre o que é o código gerenciado ou quanto ele existe, provavelmente nos permitiria fornecer a você uma resposta melhor.
  • BTW, você não deve portar para um novo compilador, mas para uma linguagem de programação mais padrão (provavelmente C ++ 14 padrão). Portanto, mudar de g++ para clang deve ser fácil depois que você fizer seu trabalho.
  • Documentação da Microsoft sobre C ++ / CLI (Common Language Infrastructure) . Basicamente, nada em C ++ / CLI é portátil. Muitas das bibliotecas da plataforma são compartilhadas com C #, portanto, a portabilidade do aplicativo para C # pode ser possível se o sistema operacional de destino for Windows. A própria C ++ / CLI está confinada ao Windows em CPUs x86 ou x64. A portabilidade para uma estrutura de GUI diferente geralmente requer a completa reconstrução da parte do código da GUI. C ++ / CLI pode usar GUI como: System.Drawing, System.Windows.Forms, Windows Presentation Foundation (WPF).
  • Portar o código GUI para Xamarin (Mono, um ambiente que usa a linguagem C #) pode permitem que ele seja executado em plataformas diferentes do Windows x86 / x64. Os dados podem ser transmitidos entre C # e C ++ simples (que pode ser compilado como DLL não gerenciado no Windows ou objeto compartilhado dinâmico (.so) no Linux) usando P / Invoke, disponível em Microsoft C # e Xamarin / Mono.

Resposta

Essas chamadas não podem “ser transferidas, pelo menos não diretamente. gcnew não é uma palavra-chave C ++, é de “C ++ / CLI”, que é um idioma diferente atualmente não suportado pelo gcc. Esta pergunta SO mais antiga diz que havia uma vez, uma tentativa de suportá-lo, mas parece estar morto desde 2009.

A única maneira razoável de fazer isso é portar todo o código gerenciado para C ++ padrão e, em seguida, gcnew e gcroot não serão mais necessários.

Resposta

Além da resposta do DocBrown “, você pode considerar o uso de alguma biblioteca coletor de lixo existente (por exemplo, Conservação de Boehm ve GC ou RavenBrook “s MPS ou seu próprio GC) em seu código. Veja também isto .

Pode não ser fácil usar um GC (pode nem valer a pena, e você pode decidir para usar gerenciamento manual C ++ genuíno e ponteiros inteligentes sem nenhum GC), e você certamente precisa estar ciente das técnicas, conceitos, terminologia e armadilhas de GC. Portanto, leia O manual do GC .

Observe que você também pode considerar o uso de algumas bibliotecas de framework C ++ existentes, como como Qt ou POCO ou Boost .

Basicamente, você deve reescrever seu código para um C ++ mais padrão (por exemplo, C ++ 14, pelo menos).

Comentários

  • Observação lateral: ao portar código gerenciado para não gerenciado, o GC ausente na maioria das vezes não é o maior problema, se é que é um problema. Encontre um substituto para as bibliotecas de classes do .NET framework usadas pelo programa é.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *