从C#应用程序生成C++可执行文件
本文关键字:C++ 可执行文件 程序生成 应用 | 更新日期: 2023-09-27 17:59:16
我有一个WCF服务接受来自我们客户的请求。在分析了请求后,我需要生成(编译+链接)C++EXE。从C#应用程序创建C++EXE的最佳方法是什么???
10倍
我只能猜测你想要什么,但我认为你的需求是:
- 您在某个服务器上运行WCF服务
- 在接收到某个调用时,服务必须根据接收到的参数输出一个(二进制)可执行文件
- 应该使用C++作为中间语言
让我们看看你需要什么。显而易见的第一个需求是可以通过编程方式调用的C++编译器/链接器。在Unix系统上,这将是g++,您可以简单地外壳调用它;在Windows上,g++也可用(名称为MinGW),但该版本已经相当过时,因此您最好使用Microsoft的命令行C++编译器。
显然,您还需要在某个地方生成C++源代码;我假设每个请求的大多数源代码或多或少都是相同的,所以您可能需要某种模板系统。如果不是太复杂,这可以像运行regex搜索并替换一堆模板文件一样简单;否则,您需要一种合适的模板语言(XSLT内置于.NET中,尽管语法需要一些时间来适应)。
然后用胶水把它粘在一起;我建议这样做:
- 读取请求并创建合适的数据结构(采用模板引擎可以使用的格式)
- 将数据传递给模板引擎,将输出文件写入临时文件夹
- 在临时位置调用编译器
- 读取回可执行文件,并将其发送到客户端
- 删除临时文件夹
由于编译通常是一项成本高昂的操作,请考虑缓存生成的可执行文件(除非实际上保证它们每次都不同)。
顺便说一句,有一个很大的警告:如果客户端平台与服务器平台不兼容(例如,服务器运行在x64上,但客户端是x86),则生成的可执行文件可能无法工作。
另一个是安全性:通过入侵服务器,或诱骗客户端发送"错误"的请求,攻击者可以通过生成的可执行文件进行潜在的恶意代码;如果这个应用程序几乎是微不足道的,我想很难正确地保护它。
可执行文件是可执行文件,由要执行的能力定义。
无论编程语言是什么,曾几何时,用来编写源代码,并将其提供给生成可执行文件的编译器,这都不再重要。无论使用哪种语言,可执行文件看起来都是一样的。(.NET可执行文件只是具有一些相当复杂的DLL依赖关系的可执行文件)
因此,不存在"C++可执行文件"这样的东西。也许你指的是一个不依赖于.NET框架的可执行文件?
或者你只是说你有一个C++应用程序需要使用WCF服务?
或者你想把你的C#代码重写为C++?
您的意思是要将c#编译为本机代码吗?在这种情况下,ngen可能会使用
http://msdn.microsoft.com/en-us/library/6t9t5wcf%28v=vs.80%29.aspx