是否可以为c++编码关闭托管代码(并打开非托管代码),以便生成的程序(Exe)可以直接运行到Visual Studio2008中的本机代码?
另外,在第一次运行.net (托管)可执行文件(比如用C#编写)之后,可执行文件会转换为本机代码(就像.net之前的旧c++可执行文件一样),这是真的吗?或者,如果它是用C#编写的,有没有办法让它直接编译成本机代码?
发布于 2009-09-15 18:44:16
这两个问题的答案都是肯定的。
您可以在不需要.Net的VS中创建非托管c++代码项目。您还可以将非托管C++代码链接到托管C++代码,并(某种程度上)两全其美-尽管to系统之间的调用参数匹配很有趣。
您还可以使用ngen .Net实用程序将.Net项目预编译为纯代码。然而,在这样做的过程中,您失去了一些灵活性。编译.Net项目时,即时编译器将考虑本地功能。因此,如果您分发一个由VS生成的.Net项目,那么运行该程序的本地机器上的ngen将进行编译。然而,如果您在您的机器上使用ngen,那么预编译的代码将绑定到您系统的处理器或功能。
根据Joel的评论。不管是否使用ngen,在目标机器上仍然需要.Net框架。
仔细想想,使用ngen预编译.Net项目可能并不比将非托管c++项目编译为本机代码差。
发布于 2009-09-15 18:39:33
要对C#执行您想要的操作,可以使用ngen.exe,它随C#编译器一起提供。在映像上运行该命令,它将作为本机代码添加到GAC中。
发布于 2009-09-15 18:45:43
据我所知,您可以临时切换到非托管代码,即通过封送处理使用非托管变量等。看看这里:http://msdn.microsoft.com/de-de/library/bb384865.aspx
https://stackoverflow.com/questions/1428937
复制相似问题