【问题标题】:What code changes are required to migrate C# to 64-bits?将 C# 迁移到 64 位需要哪些代码更改?
【发布时间】:2015-01-18 05:10:00
【问题描述】:

我了解到,一个工作的 32 位 C# Windows(或控制台)应用程序在为 64 位编译时可能会表现出不同的功能行为(通过在 Visual工作室 2013)。更多详情请见:What causes significant loss of FP precision when compiling for 64-bit?

惊讶于需要进行多次代码更改(以创建在编译为 32 位或 64 位时功能等效的代码),我在此询问具体问题是否有人来解决其他问题,这些问题需要更改现有 C# 代码才能使其作为 64 位应用程序正常运行。

注意:在这两种情况下,都使用 Windows 7(或更高版本)64 位作为操作系统。

【问题讨论】:

  • 这在很大程度上取决于代码和依赖项。一个很好的例子是 Int32 的使用。即使在 64 位版本中,这是否应该是 32 位值?不安全的代码通常需要特别注意,尤其是在使用指针时。
  • 我不同意......算术类型应该独立于 32 位或 64 位的编译。算术不变。如果您的算术需要 64 位整数,请使用 'long' (Int64) ... JIT 编译器必须解决它。
  • 我没有谈论算术。

标签: c# .net 32bit-64bit


【解决方案1】:

更改代码,不。 .NET 代码编译为独立于平台的 MSIL。

您必须做的唯一更改是使用 64 位引用的程序集而不是 32 位版本(或用 C++ 编写的 native assemblies)。例如,为特定架构编写的 ADO.NET 提供程序就是这种情况。

【讨论】:

  • 更重要的是:本地程序集。
  • @TomTom:是的。已添加。
  • 没有。我不是那个意思。
  • 那么您如何解释 Microsoft 的 JIT 编译器团队的成员确认了我需要进行的代码更改? (请参考我提供的链接)
  • 我认为这是一个功能性错误。行为相同,处理方式不同。一般来说,我的答案涵盖。
【解决方案2】:

没有变化,因为 C# 被编译成独立于体系结构的通用中间语言(CIL,MSIL 是旧名称)。

除非你使用 P/Invoke 魔法,例如:

[DllImport("advapi32.dll", SetLastError=true)]
static extern bool AbortSystemShutdown(string lpMachineName);

在 Windows 或第 3 方 DLL 上,当运行时在 64 位模式下运行的 C# 程序调用 32 位 DLL 时,您可能会遇到麻烦。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多