首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第三方库需要32位应用程序吗?

第三方库需要32位应用程序吗?
EN

Stack Overflow用户
提问于 2012-03-02 00:06:49
回答 1查看 889关注 0票数 0

亲爱的互联网社区。

我正在为一个客户调查一个问题,他在迁移到基于64位的Windows 7客户机时遇到了问题。他们的一个程序依赖于第三方的库,如果当前的应用程序不是32位的,这个库就会大惊小怪。

MyClientApplication调用MyThirdPartyLibrary0.dll,MyThirdPartyLibrary1.dll又调用MyThirdPartyLibrary1.dll。在32位环境中,我通常会这样做:

MyObject.MyMethod myObject =新建MyThirdPartyLibrary0.MyClass();var ();

一切都很好。

在64位环境中,我得到了以下异常:

代码语言:javascript
复制
System.BadImageFormatException: Could not load file or assembly 'MyThirdPartyLibrary1.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
File name: 'MyThirdPartyLibrary1.dll'
   at MyThirdPartyLibrary1.MyInnerClass.MyMethod()
   at MyThirdPartyLibrary0.MyClass.MyMethod()
   at MyApplication.Program.Main(String[] args)

在我的开发人员客户端上,我在nUnit测试中运行相同的代码,它生成相同的BadImageFormatException;如果我使用Microsoft.VisualStudio.QualityTools.UnitTestFramework运行它,那么它运行正常。我想这是因为VS2010是一个32位的应用程序吧?

我注意到,当我使用Microsoft.VisualStudio.QualityTools.UnitTestFramework时,如果我切换到使用Patform = 64位,我就不能运行测试-这些测试似乎不能在这些条件下运行。

我还没能“强制”MyApplication成功地执行MyMethod。我怀疑这里的根本原因是MyThirdPartyLibrary1.dll不能在64位应用程序上下文中运行,但我找不到一种方法来“强制”它在32位上下文中运行:在Platform = Any CPU、x86和64位之间交换会产生相同的BadImageFormatException,就像玩弄兼容性设置一样。此外,"Troubleshoot compatibility“选项建议在Windows XP (SP 2)模式下运行应用程序:结果相同。

对我来说,我似乎需要找到一种方法来将MyApplication编译为真正的32位应用程序或其他什么,但我似乎不知道如何做到这一点。

任何帮助都会很感谢,KS

EN

Stack Overflow用户

回答已采纳

发布于 2012-03-02 00:24:28

不能将32位程序集加载到正在运行的64位进程中,也不能将64位程序集加载到正在运行的32位进程中,甚至不能加载到单独的应用程序域中。您看到它与NUnit一起工作的原因是NUnit runner是一个32位应用程序。当我的程序集由于对64位C++程序集的引用而无法在NUnit中运行时,我遇到了类似的问题。我最终编译了我的C++代码两次,并基于不安全上下文中的sizeof(int)检查动态加载所需的库(一个完全的黑客攻击)。

如果您必须从64位应用程序与32位第三方DLL进行交互,我所知道的唯一选择是编写一个包装器,该包装器在单独的32位主机进程中运行,并使用进程间通信工具与您的应用程序通信。这种方法带来了一些重要的性能影响,因此在采用它之前需要三思。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9519632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档