2011-01-10 17 views
8

Qualcuno potrebbe aiutarmi a convertire C# in C++? ecco un esempio:come convertire C# in C++

using System; 
using System.Net; 
using System.Text; 
using System.IO; 
using System.Threading; 
namespace read_website 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ... 
     } 

     ...   
    } 
} 

In realtà come è complicato per mescolare C# e C++ su Unix, sto cercando di convertire C# in C++ così, qualsiasi aiuto sarà molto apprezzato

Grazie in anticipo per la risposta, aiuto e il tempo,

+6

Traducendo da una lingua all'altra non è mai facile a causa delle librerie standard coinvolti. Ad esempio, potrei essere in grado di tradurre il tuo codice se mi fornisci un'implementazione C++ di "System.Net.WebClient". O intendevi C++/CLI? –

+1

Se si deve eseguire il porting su unix, suggerisco bash + wget + perl piuttosto che C++. –

+0

Puoi fare un elenco più specifico dei problemi che hai incontrato? – FrustratedWithFormsDesigner

risposta

19

in realtà come è complicato per mescolare C# e C++ su Unix, sto cercando di convertire C# in C++

Hai considerato Mono? È qualcosa che vale sicuramente la pena controllare prima di iniziare ad imparare C++ per convertire ed eseguire un'applicazione .NET esistente su Unix. È anche compatibile con il significato binario che non è nemmeno necessario ricompilare l'assemblaggio esistente.

+0

Credo che uno dei motivi principali per l'avvio del progetto Mono è stato rendere molto facile combinare codice C++ con codice .NET, specialmente C#. – Cheeso

+7

@Cheeso, nessuno dei motivi principali per l'avvio del progetto Mono era fornire un'implementazione CLR per i sistemi * nix. –

+0

Mi stavo solo preparando per collegare il sito mono ... mi hai battuto! –

8

È quasi impossibile tradurre direttamente C# in C++ in modo che venga eseguito su macchine Unix.

Ciò è dovuto principalmente al fatto che .NET Framework non è disponibile (da C++) su macchine Unix. Mono consente di eseguire molti programmi C# /. NET, ma non supporta C++/CLI (le estensioni C++ che consentono di lavorare direttamente con .NET Framework).

La conversione della lingua è possibile, anche se difficile a causa delle differenze nell'approccio (ad es. Garbage Collection in C#), ma le chiamate di framework richiedono il porting a librerie diverse e spesso non è un buon candidato per una traduzione diretta.

Ad esempio, nel tuo codice sopra, dovresti decidere su una libreria C++ per l'accesso al web - e una volta che hai fatto quella scelta, detterebbe il codice richiesto per chiamare in quella libreria per scaricare la stringa del sito web .

+0

ci sono molti progetti che possono farlo. 3 parti o da Microsoft (ad esempio CoreRT) – Alexander77

+0

@ Alexander77 CoreRT non lo fa: è un'implementazione separata che include contenuti nativi in ​​un'API COM utilizzabile da C# ... –

7

Impara C#, impara il C++ e dedica molto tempo alla riscrittura.

Oppure utilizzare PInvoke dall'assembly C# per chiamare in una DLL di C++.

Oppure scrivere managed C++ and compile with the /clr switch. L'assembly risultante può essere referenziato e utilizzato da progetti C#.

+0

grazie per il consiglio !!! – make

4

Considerare guardando Vala. Vala è un linguaggio simile a C# che converte in C e quindi in un eseguibile. Ci sono pochissime differenze con C#. Dovrai comunque usare il tuo cervello.

5

Sto usando C# to C++ converter di volta in volta. È davvero eccezionale per la conversione di snippet da C# a C++ o C++/cli.

1

Questo è il sito Web in cui è possibile trovare il convertitore da C# a C++.

https://github.com/ASDAlexander77/cs2cpp

Hai solo bisogno di eseguire alcune operazioni di generare e compilare il codice C++ da C#. Inoltre questa applicazione converte il codice C# in C++ che è compatibile con più piattaforme.

-3
static void Main(string[] args) 
    { 
     int t = int.Parse(Console.ReadLine()); 
     for (int i = 0; i < t; i++) 
     { 
      string []a = Console.ReadLine().Split(); 
      string[] b = Console.ReadLine().Split(); 
      int n = int.Parse(a[0]); 
      int k = int.Parse(a[1]); 
      int c = int.MinValue; 
      for (int l = 0; k<=n; l++) 
      { 
       for (int j = l; j < k; j++) 
       { 
        if (int.Parse(b[j]) > c) 
         c = int.Parse(b[j]); 
       } 
       k++; 
       Console.Write(c); 
       c = int.MinValue; 
      } 
     } 
3

Ecco un convertitore online che automatizzerà il processo per te! ...

Varycode online converter

Si può fare C# per C++ e di nuovo così come convertitori per Ruby, Python, Java & VB, a quanto pare!

Edit:
sembra avere avuto il suo C++ (e java) funzionalità rimosso - dice temporaneamente, ma lo ha fatto per molto tempo. Spero che lo faranno risorgere presto!
funziona ancora per alcuni altri linguaggi (VB, Ruby, Python, Boo).

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/16218886) – Rook

+1

Il collegamento * è * la risposta. Il tuo commento non ha senso. Non c'è nient'altro da dire per me. Sospetto che tu non abbia nemmeno letto la domanda e considerato come questo la risponda. Ho modificato la risposta in modo da essere il più descrittivo possibile per un semplice link-share-that-answers-the-question. – noelicus

+0

@noelicus C'è un'alternativa? Al momento viene visualizzato un messaggio con le scuse di varycode che la conversione C++ non è disponibile. –

0

Si consiglia di considerare CoreRT. È un progetto .NET il cui obiettivo è eliminare la necessità che il CLR esegua le applicazioni sulla piattaforma di destinazione. Invece, genera codice C++ da un determinato codice C#. Questo codice C++ è compilato e collegato su qualsiasi piattaforma di destinazione che supporti C++.

Un post su un blog di Microsoft ha dichiarato: "Se desidero davvero scrivere un codice C# e farlo funzionare su un nuovo dispositivo IoT, non ho alcuna opzione fino a quando RyuJIT non sarà in grado di generare una macchina codice che funziona con quel processore e sistema operativo. " Mediante la compilazione incrociata di C# in C++, gli sviluppatori .Net possono quindi distribuire le loro applicazioni senza dover attendere che .Net sia distribuito su una determinata piattaforma.

https://github.com/dotnet/corert