从32位到64位时的绊脚石

时间:2010-07-16 17:00:12

标签: visual-studio-2008 x86-64

我最近收到了一台运行Windows 7的PC用于未来的开发,因为这将更接近我们的生产环境。我正在为我的旧机器(Windows XP 32位)上的解决方案工作,但决定开始使用新的盒子来尝试解决任何问题。我在两个盒子上安装了visual studio 2008。

我正在使用的解决方案使用32位的NServiceBus。安装在开发盒上的oracle驱动程序虽然是64位,但这给我带来了很多麻烦。我得到NserviceBus无法加载64位oracle dll的运行时错误。我已经尝试过我能想到的解决方案平台和目标平台的每个组合。我确实在一周前完成了它的工作,但我已经解除了更改并重新加载了一个搁架,我无法让它再次工作。

我正在寻找在这种混合环境中工作的一般指导原则,提示和技巧。如果引用它们的项目使用32位汇编,我是否需要返回并将项目设置为32位?等等。感谢您提供任何指导。

3 个答案:

答案 0 :(得分:2)

你需要在DLL和可执行格式中保持同质 - 如果一个是32位,一切都需要是32位。如果一个是64位,一切都需要64位。

唯一的例外是托管代码:如果设置为“任何CPU”,则可以通过32位或64位进程加载。

答案 1 :(得分:2)

32位和64位代码不能同时存在于同一进程中。

如果需要使用64位程序中的32位DLL(反之亦然),则需要生成一个新进程并使用一些进程间通信(IPC)技术。

答案 2 :(得分:1)

这是我遇到的ASCOM(天文共同对象模型)平台的一个问题。基本上,如果只有一个32位依赖项,那么所有代码​​都必须是32位。在我们的例子中,我们不一定拥有客户端应用程序,因此我们无法控制它是32位还是64位,因此我们必须严格删除代码中的所有32位依赖项并编译所有内容对于'任何CPU'。

alt text http://community.tigranetworks.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_long/1373.image_5F00_7A568AC3.png

我们在ASCOM中探讨的一些想法记录在我的博客Electric Dreams上。