我有一个WCF服务接受来自客户的请求。 在分析了我需要生成(编译+链接)C ++ EXE的请求之后。 从C#应用程序创建C ++ EXE的最佳方法是什么?
10倍
答案 0 :(得分:0)
可执行文件是可执行文件,由执行的能力定义。
无论编程语言是什么,曾经有一段时间用于编写源代码,这些源代码被提供给生成可执行文件的编译器,这不再重要。无论您使用哪种语言(或多种语言),可执行文件都是相同的。 (.NET可执行文件只是一个具有一些相当复杂的DLL依赖项的可执行文件)
所以没有“C ++可执行文件”这样的东西。也许你的意思是一个不依赖于.NET框架的可执行文件?
或者您只是意味着您有一个需要使用WCF服务的C ++应用程序?
或者您想将C#代码重写为C ++?
答案 1 :(得分:0)
我只能猜到你想要的是什么,但我认为你的要求是这样的:
让我们来看看你需要什么。显而易见的第一个要求是可以通过编程方式调用的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