就我而言,目标系统为Windows 7 Professional x64
和Windows XP SP3 x86
。
所以我在各种文章中读到的内容(我认为甚至有关于SO的类似主题的答案)是必须转到Soltuion
的{{1}}( RMB到解决方案 - > 配置管理器)并将Configuration Manager
设置为任意CPU 。
现在所有这些文章都描述了旧版MSVS或MSVC ++版本的设置,但我认为2013 RC版本(我刚刚安装的版本)Platform
没有重大变化。
在Configuration Manager
下拉列表中,我没有Active Solution
选项,因此我按照了在SO上找到的 this recipe 。在我的情况下,在这个小指南失败后,我仍然无法在执行第5步时选择Any CPU
:
我可以使用的下拉项目是Any CPU
和x64
(ARM
,但默认情况下已添加),我无法选择Win32
。
添加目标平台Any CPU
并编译可执行文件正常,该程序在Windows 7 x64上以64位运行,但当然无法在32位Windows XP计算机上运行。
如何在 Microsoft Visual Studio Professional 2013 RC 中将目标平台设置为x64
?
答案 0 :(得分:2)
不,绝对不是。您需要定义单独的可执行文件。
“Any CPU”下拉列表允许您为多个平台设置编译器设置(例如,x64和Win32的_DEBUG处理器)您实际上无法构建到该目标。
答案 1 :(得分:2)
AnyCPU是指.Net程序,而不是C ++。 C ++必须编译为本机,x86或x64。您可以构建64位程序并将其捆绑到您的32程序中,并在运行时将其解压缩。 ProcessExplorer使用此技术。
答案 2 :(得分:2)
也许不是一个真正的答案,但对于大多数事情,在64位系统上运行32位代码工作得非常好。当然,它可能运行速度稍慢,但与必须处理(并彻底测试)两个不同的二进制文件相比,除非它在64位模式下具有显着的性能优势(或者您的应用程序使用超过大约2GB的内存空间),我很想使用32位模式。
答案 3 :(得分:1)
MacOS支持称为“胖二进制文件”的东西,程序编译两次,两个版本都打包到一个文件中。操作系统决定实际启动哪个版本。
Windows没有类似的内容。
答案 4 :(得分:1)
您可以将.NET包装器(任何CPU)和其余程序编译为yourprogram86.dll和yourprogram64.dll
[DllImport("yourprogram32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")]
public static extern void open32();
[DllImport("yourprogram64.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")]
public static extern void open64();
static bool Is64()
{
//.Net 4.0
//Environment.Is64BitOperatingSystem
//.Net 2.0
return IntPtr.Size == 8;
}
static void open()
{
if (Is64())
open64();
else
open32();
}