如何将C#转换为C++

13

有人可以帮我将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]);
            }

        }
    }
}

实际上由于在Unix系统中混合使用C#和C++比较复杂,所以我正在尝试将C#转换为C++。


9
由于涉及到标准库的问题,将一种语言翻译成另一种语言从来都不是易事。例如,如果您能够向我提供 C++ 实现的 System.Net.WebClient,我可能能够翻译您的代码。或者您是指 C++/CLI? - Frédéric Hamidi
1
如果你要将它移植到 Unix 上,我建议使用 bash+wget+perl,而不是 C++。 - Ben Voigt
2
你能否列出更具体的问题清单? - FrustratedWithFormsDesigner
@make,在你翻译这段代码之前,你可能需要修改一下它。每秒钟访问一个Web服务器10次可能不是一个好主意。 - Frédéric Hamidi
感谢大家的回复。1)C++/CLI在UNIX上受支持吗?@Ben Voigt,您能否请给我更多使用bash + wget + perl的细节...再次感谢大家! - make
显示剩余2条评论
8个回答

27
实际上,在Unix上混合使用C#和C++是非常复杂的,所以我正在尝试将C#转换为C++。
你考虑过Mono吗?在开始学习C++以便在Unix上转换和运行现有的.NET应用程序之前,检查一下它肯定是值得的。它还具有二进制兼容性,这意味着您甚至不需要重新编译现有的程序集。

12
@Cheeso,Mono项目成立的主要原因之一是为*nix系统提供CLR实现。 - Darin Dimitrov
4
安装 Mono 比将您发布的代码移植到 C++ 要简单得多。 - Darin Dimitrov
@Darin Dimitrov,感谢您的回复。是否有适用于Unix的软件包? - make
@Darin Dimitrov,感谢您与我分享您的想法... - make
Dimitrov,提供CLR在nix上从来不是Mono的最终目标。我没有清楚地表达我的观点。我的意思是,Miguel在早期追求Mono的原因是为了在Linux上实现混合语言,如C++和C#。http://mail.gnome.org/archives/gnome-hackers/2002-February/msg00031.html Mono确实在nix上提供了CLR(或多或少),但并非为此而设计。CLR只是达成目标的手段。最终目标是更轻松地混合语言(库和应用程序),Miguel设想Mono运行时(又称CLR)作为提供该功能的工具。 - Cheeso
显示剩余8条评论

12

9
几乎不可能直接将C#翻译成C++,以便在Unix机器上运行。这主要是由于在Unix机器上没有可用的.NET Framework(从C++)。Mono允许您运行许多C#/.NET程序,但不支持C++/CLI(允许直接使用.NET Framework的C++扩展)。转换语言是可能的,但由于方法的差异(例如,在C#中进行垃圾回收),框架调用将需要移植到不同的库,并且通常不适合直接翻译。例如,在上面的代码中,您必须选择一个用于Web访问的C++库-一旦做出了该选择,它将决定所需的代码来调用该库以下载网站字符串。

有很多项目可以做到这一点。第三方或来自微软(例如CoreRT)。 - Alexander77
@Alexander77 CoreRT不会这样做 - 它是一个单独的实现,它将本地内容包装在类似于COM的API中,可从C#中使用... - Reed Copsey

6

我时不时地使用C#转C++转换器来进行转换。它对于从c#到c++或c++/cli的片段转换非常好用。


4

考虑使用Vala。Vala是一种类似于C#的语言,可以转换成C语言,然后编译成可执行文件。与C#相比,它们之间几乎没有什么区别。但你仍需要动动脑筋。


4
你可能需要考虑使用CoreRT。这是一个.NET项目,其目标是消除CLR在运行应用程序时必须存在于目标平台的需要。相反,它从给定的C#代码生成C++代码。该C++代码在支持C++的任何目标平台上进行编译和链接。
微软博客上的一篇文章说:“如果我真的想编写一些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),仍然可以使用。


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - Rook
2
链接就是答案。你的评论毫无意义。我没有其他要说的了。我怀疑你甚至没有阅读问题并考虑这如何回答它。我已经编辑了答案,使其尽可能详细地解释了一个简单的链接分享问题的答案。 - noelicus
@noelicus 有没有其他的选择?目前显示一条消息,由 varycode 发出,表示无法进行 C++ 转换并道歉。 - WonderWorker
哦,我不知道,抱歉。 - noelicus
2
整个域名现在出售中... - Happypig375

2
如前所述,库的翻译可能是一个问题,但是一个开源项目可能在某些情况下有所帮助:http://alexalbala.github.io/Alter-Native/
从其主页引用:
它提供了一个工具,可以轻松地将应用程序从高级语言(如.NET)移植到本地语言,例如C ++。这是一个研究项目,并在与UPC-BarcelonaTech和AlterAid S.L.的合作中进行开发。

请注意,此项目非常庞大(超过280MB+)。 - Hanz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接