如果我有用C#编写的32位应用程序,我需要做些什么来将其转换为64位?我假设它更复杂,然后在Visual Studio中将目标机器更改为64位并重新编译。创建64位应用程序
回答
如果您不使用interop(COM,WinAPI)并且不对指针大小进行假设,那么它就是直接切换到其他平台的指针。即使使用后者,你也可能很好,除非你使用某些地方提供的上述假设的库。
引述有关System.IntPtr的MSDN:
的IntPtr的类型被设计为一个整数,其大小是特定于平台。也就是说,这种类型的实例预期在32位硬件和操作系统上为32位,在64位硬件和操作系统上为64位。
- 但是其他.NET类型被设计为具有固定大小,而不管平台如何。
我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:53:18
这取决于你的应用程序在做什么。如果它使用非托管API,P/Invoke和指针算法,那么很可能它不会在没有修改的64位平台上工作。否则,你可以确定,你甚至不需要指定一个平台,只是针对任何CPU,它应该工作。
我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:53:53
http://www.vistadb.net/compare/jet-access.aspx – 2009-10-19 18:57:22
按this question的建议怎么样?我从来没有这样做过,我会注意到。
http://msdn.microsoft.com/en-us/library/ms241064.aspx
其他的评论是好点。您还需要了解registry virtualization和Wow64节点的更改。
请注意,Windows Vista/Server 2008中受影响的密钥与Windows 7/Server 2008 R2中受影响的密钥不同。请参阅http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx#redirected__shared__and_reflected_keys_under_wow64 – Powerlord 2009-10-19 19:10:44
我假设它更复杂,然后简单地在Visual Studio中将目标机器更改为64位并重新编译。
也许不是。如果你对外部库没有任何依赖关系,那就只需要这么做。是什么让这个部署更具挑战性呢?您不想将64位二进制文件发送给32位用户。因此,更好的办法是选择“Any CPU”选项,并且您的应用程序将自动在64位计算机上(安装了64位版本的框架)和32位(x86)的JIT编译为64位其他。
但是你必须是非常确定你没有任何32位的依赖关系。
你真的需要它运行在64位或你只是想让它在64位机器上运行?
在后者的情况下,您可以将C#项目设置为目标Win32,而不是AnyCPU。这意味着当你在64位机器上运行它时,它将通过WOW(32位“模拟”)运行,这具有(非托管的)JET驱动程序也将运行32位的优点。这应该可以解决你的问题。
我的同事们在他的一个个人项目中遇到了问题。事实证明,微软并没有为64位编写Jet驱动程序,也无意这样做。
这很奇怪,因为Office 2010将具有64位版本。
我给你的建议是将项目属性设置为x86(而不是任何CPU)并将其留在那里。 Windows 64位可以毫无问题地运行32位应用程序,它是无法运行的16位应用程序。
- 1. 用Qt构建64位应用程序
- 2. 64位Java应用程序:是64位操作系统,64位JRE和64位应用程序吗?
- 3. 我需要什么来创建64位.NET应用程序
- 4. 32位/ 64位Windows/Linux应用程序
- 5. 从32位应用程序启动64位应用程序?
- 6. 检查应用程序是建立在32位还是64位?
- 7. Linux环境构建32位和64位应用程序(C++)
- 8. 在x86_64(64位)Mountain Lion上构建i386(32位)应用程序
- 9. 在64位.net应用程序通过c + + 64位DLL pInvoke
- 10. Windows应用商店的应用程序:无法创建64位的应用程序包
- 11. 64位Web应用程序给错误
- 12. iPhone应用程序,支持64位
- 13. .NET和64位应用程序
- 14. {$ SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} 64位delphi应用程序
- 15. iOS 32与64位应用程序
- 16. 无法与64位应用程序
- 17. qt应用程序64位窗口
- 18. 为64位开发iOS应用程序
- 19. 如何在32位PC上创建64位InstallShield安装程序?
- 20. 创建一个16位应用程序?
- 21. 无法使用VS 2010创建64位msi安装程序
- 22. 在64位机器上编译32位应用程序以获得64位应用程序
- 23. Outlook 64位使用从32位应用程序的64位兑换
- 24. 如何创建64位CUDA应用程序? (Win7 x64,CUDA 4,VS 2010 Express)
- 25. 创建快捷方式 - 编译为64位应用程序只有
- 26. 在32位构建服务器上构建64位web应用程序
- 27. 如何在MSVC++ 2008 Express中构建64位应用程序?
- 28. 无法构建与64位支持ios应用程序
- 29. 德尔福XE2 - 构建64位应用程序
- 30. Xcode问题与LibX库构建64位应用程序
我遇到的问题是,我的程序使用MS Access数据库,它似乎并没有在64位模式下运行。根据我从Google等网站上了解到的情况,微软没有64位版本的JET数据库驱动程序。有没有办法解决?也许做一些调用32位驱动程序或什么的某种64位包装? – Icemanind 2009-10-19 18:54:49
为什么要关心在64位进程中运行,如果你搞乱Access数据库?你不需要GeForce来运行Commander Keen,ffs。 – Will 2009-10-19 18:58:18
停止在所有答案上复制相同的评论。你曾评论过,我们都可以看到它,我保证。 – 2009-10-19 19:12:04