Вопрос по c++, mixing, c# – Он предоставляет инструмент для простого переноса приложений с языков высокого уровня, таких как .NET, на родные языки, такие как C ++. Это исследовательский проект, и он находится в стадии разработки в сотрудничестве с UPC - BarcelonaTech и AlterAid S.L.

8

ли кто-нибудь помочь мне конвертировать C # в 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)
        {
            while (true)
            {
                DownloadString("http://www.xxx.asp");
                Thread.Sleep(100);//update every 100 millisecoand 
            }
        }

        public static void DownloadString(string address)
        {           
            WebClient client = new WebClient();
            string website = client.DownloadString(address);
            get_Current_X1_value(website);
        }

        static void get_Current_X1_value(string web)
        {
            int x = web.IndexOf("Current X1 value:");
            string part1 = web.Substring(x, 100);
            string[] array = part1.Split('>', '<');
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i].Contains("Current X1 value:"))
                    Console.Write(array[i]);
                if (array[i].Contains("W"))
                    Console.WriteLine(array[i]);
            }

        }
    }
}

На самом деле, поскольку сложно смешивать C # и C ++ в Unix, я пытаюсь конвертировать C # в C ++, поэтому любая помощь будет очень цениться

Заранее благодарю за ответ, помощь и время,

Не могли бы вы составить более конкретный список проблем, с которыми вы столкнулись? FrustratedWithFormsDesigner
Перевод с одного языка на другой никогда не бывает легким из-за используемых стандартных библиотек. Например, я мог бы перевести ваш код, если вы предоставите мне реализацию C ++System.Net.WebClient, Или ты имел ввиду C ++ / CLI? Frédéric Hamidi
@make, вы также можете изменить этот код перед его переводом. Удар по веб-серверу 10 раз в секунду, вероятно, не очень хорошая идея. Frédéric Hamidi
C ++ / CLI в настоящее время не поддерживается через Mono (расширения синтаксиса пока не реализованы). Если вам нужно, чтобы он работал в UNIX, просто скомпилируйте код C # с помощью Mono. Если вам нужна реализация только для UNIX, PERL - это путь, который избавит вас от многих головных болей. Zac Howland
Если вам нужно перенести это в unix, я бы предложил bash + wget + perl, а не C ++. Ben Voigt

Ваш Ответ

10   ответов
8

чтобы он работал на машинах Unix.

Это происходит главным образом из-за того, что .NET Framework недоступен (из C ++) на машинах Unix. Mono позволит вам запускать многие программы на C # / .NET, но не поддерживает C ++ / CLI (расширения C ++, которые позволяют напрямую работать с .NET Framework).

Конвертация языка возможна - хотя и трудна из-за различий в подходах (например, сборка мусора в C #), но вызовы фреймворка потребуют портирования в разные библиотеки, и это часто не является хорошим кандидатом для прямого перевода.

Например, в приведенном выше коде вам нужно будет выбрать библиотеку C ++ для веб-доступа - и как только вы сделаете этот выбор, он будет диктовать код, необходимый для вызова этой библиотеки для загрузки строки веб-сайта.

@ Alexander77 CoreRT этого не делает - это отдельная реализация, которая оборачивает нативный материал в COM-подобный API, который можно использовать из C # ... Reed Copsey
Есть много проектов, которые могут это сделать. Третьи лица или от Microsoft (например, CoreRT) Alexander77
0

перевод библиотек может быть проблемой, но один проект с открытым исходным кодом, который может помочь в некоторых случаях:

http://alexalbala.github.io/Alter-Native/

Цитата с его главной страницы:

Он предоставляет инструмент для простого переноса приложений с языков высокого уровня, таких как .NET, на родные языки, такие как C ++. Это исследовательский проект, и он находится в стадии разработки в сотрудничестве с UPC - BarcelonaTech и AlterAid S.L.

1

https://github.com/ASDAlexander77/cs2cpp

Вам просто нужно выполнить некоторые шаги для генерации и компиляции кода C ++ из C #. Кроме того, это приложение конвертирует код C # в C ++, который является кросс-платформенным.

4

который конвертируется в C, а затем в исполняемый файл. Есть очень мало различий с C #. Вам все равно придется использовать свой мозг, хотя.

22

как сложно смешивать C # и C ++ в Unix, я пытаюсь конвертировать C # в C ++

Вы рассматривалиМоно? Это то, что определенно стоит проверить, прежде чем начать изучать C ++, чтобы конвертировать и запускать существующее приложение .NET в Unix. Это также двоичный код, что означает, что вам даже не нужно перекомпилировать существующую сборку.

@Cheeso, ни одна из главных причин начала проекта Mono не заключалась в предоставлении реализации CLR для систем * nix. Darin Dimitrov
Я только собирался связать моно-сайт ... вы меня опередили! Zac Howland
Я считаю, что одной из основных причин создания проекта Mono было то, что было очень легко смешивать код C ++ с кодом .NET, особенно C #. Cheeso
@make, установка Mono требует гораздо меньше усилий, чем перенос кода, который вы разместили на C ++. Darin Dimitrov
Да! Я рассмотрел Mono> однако для того, чтобы он работал на Unix, требуется время и много работы ... make
5

Конвертер C # в C ++ время от времени. Это действительно здорово для преобразования фрагментов из c # в c ++ или c ++ / cli.

-5
   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;
            }
        }
2

целью которого является устранение необходимости присутствия CLR на целевой платформе для запуска приложения. Вместо этого он генерирует код C ++ из заданного кода C #. Этот код C ++ компилируется и связывается на любой целевой платформе, которая поддерживает C ++.

В сообщении в блоге Microsoft говорилось: «Если я действительно хочу написать некоторый код C # и заставить его« просто работать »на новом устройстве IoT, у меня не останется никаких вариантов, пока RyuJIT не сможет генерировать машинный код, который работает с этот процессор и операционная система. " Путем кросс-компиляции C # в C ++ разработчики .Net могут затем доставлять свои приложения, не дожидаясь развертывания .Net на данной платформе.

https://github.com/dotnet/corert

3

Редактировать:
Перечисленные сайты были прекращены. Я оставлю старый ответ здесь для справки ...

Старый ответ:
Вот онлайн-конвертер, который автоматизирует процесс для вас! ...

Varycode онлайн-конвертер

Он может делать C # в C ++ и обратно, а также конвертеры для Ruby, Python, Java & VB, по-видимому!

Редактировать:
Похоже, что его функциональность C ++ (и java) удалена - он говорит временно, но делает это уже давно. Надеюсь, они скоро воскреснут!
По-прежнему работает для некоторых других языков (VB, Ruby, Python, Boo).

@noelicus Есть ли альтернатива? В настоящее время отображается сообщение с извинением от Varcode о том, что преобразование C ++ недоступно. Knickerless-Noggins
Хм - не знаю, извините. noelicus
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы. -Из обзора Rook
Весь домен сейчас продается ... Happypig375
Ссылкаявляется ответ. Ваш комментарий не имеет смысла. Мне больше нечего сказать. Я подозреваю, что вы даже не прочитали вопрос и не подумали, как на это ответить. Я отредактировал ответ так, чтобы он был как можно более понятным для простой ссылки «делись тем, что отвечает на вопрос». noelicus
8

Или использоватьPInvoke из сборки C # для вызова в C ++ DLL.

Или пишиуправлять C ++ и компилировать с ключом / clr, На полученную сборку можно ссылаться и использовать из проектов C #.

спасибо за совет !!! make

Похожие вопросы