2009-10-19 61 views
1

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

+0

我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:54:49

+4

为什么要关心在64位进程中运行,如果你搞乱Access数据库?你不需要GeForce来运行Commander Keen,ffs。 – Will 2009-10-19 18:58:18

+2

停止在所有答案上复制相同的评论。你曾评论过,我们都可以看到它,我保证。 – 2009-10-19 19:12:04

回答

6

如果您不使用interop(COM,WinAPI)并且不对指针大小进行假设,那么它就是直接切换到其他平台的指针。即使使用后者,你也可能很好,除非你使用某些地方提供的上述假设的库。

引述有关System.IntPtr的MSDN:

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

- 但是其他.NET类型被设计为具有固定大小,而不管平台如何。

+0

我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:53:18

2

这取决于你的应用程序在做什么。如果它使用非托管API,P/Invoke和指针算法,那么很可能它不会在没有修改的64位平台上工作。否则,你可以确定,你甚至不需要指定一个平台,只是针对任何CPU,它应该工作。

+0

我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:53:53

+0

http://www.vistadb.net/compare/jet-access.aspx – 2009-10-19 18:57:22

0

我假设它更复杂,然后简单地在Visual Studio中将目标机器更改为64位并重新编译。

也许不是。如果你对外部库没有任何依赖关系,那就只需要这么做。是什么让这个部署更具挑战性呢?您不想将64位二进制文​​件发送给32位用户。因此,更好的办法是选择“Any CPU”选项,并且您的应用程序将自动在64位计算机上(安装了64位版本的框架)和32位(x86)的JIT编译为64位其他。

但是你必须是非常确定你没有任何32位的依赖关系。

4

你真的需要它运行在64位或你只是想让它在64位机器上运行?

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

2

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

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

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

相关问题