【问题标题】:Creating 64-bit applications创建 64 位应用程序
【发布时间】:2010-12-08 02:29:16
【问题描述】:

如果我有一个用 C# 编写的 32 位应用程序,我需要做什么才能将其转换为 64 位?我假设它更复杂,然后只需在 Visual Studio 中将目标计算机更改为 64 位并重新编译。

【问题讨论】:

  • 我遇到的问题是,我的程序使用了一个 MS Access 数据库,它似乎没有在 64 位模式下运行。根据我从谷歌搜索等方面的了解,微软没有 64 位版本的 JET 数据库驱动程序。有没有办法解决?也许制作某种 64 位包装器来调用 32 位驱动程序之类的?
  • 如果您在使用 Access 数据库,为什么还要关心在 64 位进程中运行?你不需要 GeForce 来运行 Commander Keen,ffs。
  • 停止对您获得的所有答案重复相同的评论。你评论一次,我们都能看到,我保证。

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


【解决方案1】:

这取决于您的应用程序在做什么。如果它使用非托管 API、P/Invoke 和指针算法,那么如果不进行一些修改,它很可能无法在 64 位平台上运行。否则你就可以了,你甚至不需要指定一个平台,只需要针对任何 CPU 就可以了。

【讨论】:

  • 我遇到的问题是,我的程序使用了一个 MS Access 数据库,它似乎没有在 64 位模式下运行。根据我从谷歌搜索等方面的了解,微软没有 64 位版本的 JET 数据库驱动程序。有没有办法解决?也许制作某种 64 位包装器来调用 32 位驱动程序之类的?
【解决方案2】:

如果您不使用互操作(COM、WinAPI)并且不对指针的大小做出假设,则可以直接切换到其他平台。即使使用后者,您也可能没问题,除非您使用在某处做出上述假设的库。

引用关于System.IntPtr的MSDN:

IntPtr 类型被设计为一个整数,其大小是特定于平台的。也就是说,这种类型的实例在 32 位硬件和操作系统上预计为 32 位,在 64 位硬件和操作系统上预计为 64 位。

– 但其他 .NET 类型设计为具有固定大小,与平台无关。

【讨论】:

  • 我遇到的问题是,我的程序使用了一个 MS Access 数据库,它似乎没有在 64 位模式下运行。根据我从谷歌搜索等方面的了解,Microsoft 没有 64 位版本的 JET 数据库驱动程序。有没有办法解决?也许制作某种 64 位包装器来调用 32 位驱动程序之类的?
【解决方案3】:

按照this question 的建议怎么样?我以前从未这样做过,我会注意的。

【讨论】:

    【解决方案4】:

    http://msdn.microsoft.com/en-us/library/ms241064.aspx

    其他 cmets 都是好点。您还需要了解 registry virtualization 和 Wow64 节点的变化。

    【讨论】:

    【解决方案5】:

    我假设它更复杂,然后只需在 Visual Studio 中将目标计算机更改为 64 位并重新编译。

    也许不是。如果你对外部库没有任何依赖,这就是你所要做的。除此之外,更具挑战性的是部署。您不想将 64 位二进制文​​件发送给 32 位用户。因此,更好的是,选择“Any CPU”选项,您的应用程序将在 64 位机器上自动 JIT 编译为 64 位(安装了 64 位版本的框架)和 32 位 (x86) 无处不在否则。

    但您必须非常确保您没有任何 32 位依赖项。

    【讨论】:

      【解决方案6】:

      您真的需要它在 64 位上运行还是只希望它在 64 位机器上运行?

      对于后者,您可以将 C# 项目设置为以 Win32 为目标,而不是 AnyCPU。这意味着当您在 64 位机器上运行它时,它将通过 WOW(32 位“仿真”)运行,这具有(非托管)JET 驱动程序也将运行 32 位的优势。这应该可以解决您的问题。

      【讨论】:

        【解决方案7】:

        我的一位同事刚刚在他的一个个人项目中遇到了问题。事实证明,微软还没有为 64 位编写 Jet 驱动程序,也没有这样做的打算。

        这很奇怪,因为 Office 2010 将有一个 64 位版本。

        我对您的建议是将项目属性设置为 x86(not 任何 CPU)并将其保留在那里。 Windows 64 位可以毫无问题地运行 32 位应用程序,但它们无法运行 16 位应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-03
          • 2012-10-01
          • 2011-01-12
          • 2010-12-11
          • 1970-01-01
          • 2012-01-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多