是否可以为c ++编码关闭托管代码(并打开非托管代码),以便所做的程序(exes)直接运行到Visual Studio 2008中的本机代码?
此外,在第一次运行.net(托管)exe之后运行(比如用C#编写),exe会转换为本机代码(就像旧的c ++前面的.net)吗?或者有没有办法让它直接编译为本机代码,如果它是用C#编写的?
答案 0 :(得分:4)
这两个问题的答案都是肯定的。
您可以在VS中创建不需要.Net的非托管c ++代码项目。您还可以将非托管C ++代码链接到托管C ++代码,并且(有点)获得两全其美 - 尽管在系统之间调用参数的匹配很有趣。
您还可以使用ngen .Net实用程序将.Net项目预编译为纯代码。但是这样做会让你失去一些灵活性。编译.Net项目时,JIT编译器将考虑本地功能。因此,如果您分发由VS生成的.Net项目,那么运行该程序的本地计算机上的ngen将进行编译。但是,如果在计算机上使用ngen,则预编译的代码将与系统的processsor功能相关联。
根据乔尔的评论。无论是否使用ngen,您仍然需要在目标机器上使用.Net框架。
在考虑它时,使用ngen预编译.Net项目可能并不比将非托管c ++项目编译为本机代码更糟糕。
答案 1 :(得分:1)
要为C#做你想做的事,你可以使用C#编译器附带的ngen.exe。您在映像上运行该命令,它将作为本机代码添加到GAC。
答案 2 :(得分:0)
据我所知,您可以暂时切换到非托管代码,即通过编组使用非托管变量等。看看这里:http://msdn.microsoft.com/de-de/library/bb384865.aspx