Google给了我一个线索, 可以将代码编译成一个可执行文件, 在32位操作系统上以32位运行 ,在64位操作系统上以64位运行 。 可执行文件真的有可能在运行时确定它的位数?
在我的情况下,目标系统将是Windows 7 Professional x64
和Windows XP SP3 x86
。
所以我在各种文章上阅读的内容(我认为甚至还有Soltuion
SO的答案),就是必须到Soltuion
的Configuration Manager
( RMB到解决scheme – > configurationpipe理器 ),并将Platform
设置为任何CPU 。
现在,所有这些文章都介绍了旧版MSVS或MSVC ++版本的设置,但是我认为在2013版RC(我刚刚安装)中没有对Configuration Manager
进行重大更改。
在Active Solution
下拉列表中,我没有selectAny CPU
,所以我遵循这个配方 ,我发现。 在我的情况下,这个小小的指南失败了,我仍然没有selectAny CPU
时,按照第5步:
可用的下拉列表项是x64
和ARM
( Win32
也是默认添加的),我不能selectAny CPU
。
添加目标平台x64
并编译可执行文件运行良好,程序在Windows 7 x64上运行为64位,但是无法在32位Windows XP机器上运行。
如何将目标平台设置为Microsoft Visual Studio Professional 2013 RC中的 Any CPU
?
不,这绝对不是。 您需要定义单独的可执行文件。
“任何CPU”下拉列表允许您为多个平台设置编译器设置(例如,用于x64和Win32的_DEBUG处理器)您不能实际构建到该目标。
AnyCPU是指.Net程序,而不是C ++。 C ++必须编译为本地,x86或x64。 你可以建立64位程序并将其捆绑到你的32程序中,在运行时解压。 ProcessExplorer使用此技术。
也许不是一个真正的答案,但是对于大多数情况来说,在64位系统上运行32位代码工作得非常好。 当然,它可能会运行得慢一些,但是相比于不得不处理(并彻底测试)两个不同的二进制文件,除非在64位模式下(或者您的应用程序使用大于2GB左右的内存空间)具有显着的性能优势,我很想用32位模式。
MacOS支持所谓的“胖二进制文件”,其中程序编译两次,两个版本都打包成一个文件。 操作系统决定实际启动哪个版本。
Windows没有这样的东西。
您可以编译.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(); }