从C#应用程序生成C ++可执行文件

时间:2011-06-14 08:30:50

标签: c# c++

我有一个WCF服务接受来自客户的请求。 在分析了我需要生成(编译+链接)C ++ EXE的请求之后。 从C#应用程序创建C ++ EXE的最佳方法是什么?

10倍

3 个答案:

答案 0 :(得分:0)

可执行文件是可执行文件,由执行的能力定义。

无论编程语言是什么,曾经有一段时间用于编写源代码,这些源代码被提供给生成可执行文件的编译器,这不再重要。无论您使用哪种语言(或多种语言),可执行文件都是相同的。 (.NET可执行文件只是一个具有一些相当复杂的DLL依赖项的可执行文件)

所以没有“C ++可执行文件”这样的东西。也许你的意思是一个不依赖于.NET框架的可执行文件?

或者您只是意味着您有一个需要使用WCF服务的C ++应用程序?

或者您想将C#代码重写为C ++?

答案 1 :(得分:0)

我只能猜到你想要的是什么,但我认为你的要求是这样的:

  • 您在某处的服务器上运行WCF服务。
  • 收到某个电话后,服务必须根据收到的参数输出(二进制)可执行文件。
  • C ++应该用作中间语言。

让我们来看看你需要什么。显而易见的第一个要求是可以通过编程方式调用的C ++编译器/链接器。在Unix系统上,这将是g ++,你可以简单地shell-out来调用它;在Windows上,g ++也可用(名称为MinGW),但版本已经过时了,所以你可能最好使用微软的命令行C ++编译器。

显然,你还需要在某处生成C ++源代码;我假设每个请求的大多数源代码或多或少都相同,因此您可能需要某种模板系统。如果它不是太复杂,这可以像在一堆模板文件上运行正则表达式搜索和替换一样简单;否则,你需要一个合适的模板语言(XSLT内置于.NET中,虽然语法需要一些时间来习惯)。

然后胶水使它一起工作;我建议这样的事情:

  • 读取请求并创建合适的数据结构(采用模板引擎可以使用的格式)
  • 将数据传递给模板引擎,将输出文件写入临时文件夹
  • 在临时位置调用编译器
  • 重新读取可执行文件,将其发送给客户端
  • 删除临时文件夹

由于编译通常是一项代价高昂的操作,因此请考虑缓存生成的可执行文件(除非它们实际上保证每次都不同)。

顺便提一下,有一个重要的警告:如果客户端平台与服务器平台不是二进制兼容的(例如,服务器在x64上运行但客户端是x86),则生成的可执行文件可能无效。 / p>

另一个是安全性:通过黑客攻击服务器或欺骗客户端发送“错误”请求,攻击者可能通过生成的可执行文件进行恶意代码攻击;如果这个应用程序几乎是非常重要的,那么我认为要正确保护这个东西是非常困难的。

答案 2 :(得分:0)

你的意思是你想将c#编译为本地机器代码吗?在这种情况下,ngen可能是一些用途

http://msdn.microsoft.com/en-us/library/6t9t5wcf%28v=vs.80%29.aspx