为什么我能够从运行在IIS7中的64位模式下的AnyCPU . net web应用程序调用32位COM库?

本文关键字:web net AnyCPU 应用程序 调用 COM 32位 模式 运行 64位 中的 | 更新日期: 2023-09-27 18:02:47

在不使用COM+代理服务的情况下,我很高兴能够使用来自。net应用程序的32位COM互操作库中的类,该应用程序使用目标AnyCPU编译,运行在64位w3wp进程中。

我在64位。net进程中成功实例化了32位COM互操作库中的类。

w3wp以64位模式运行,IIS配置设置为不允许32位应用程序。最重要的是,有一个专门的x64编译和注册的。net程序集。

我只是想知道,这怎么可能?

有趣的是,如果代码是用Visual Studio 2008(针对3.5框架)编译的话,效果会很好。如果在Visual Studio 2010中编译相同的代码,目标是3.5框架,那么当它试图加载32位COM互操作库时,应用程序会严重失败。

为什么我能够从运行在IIS7中的64位模式下的AnyCPU . net web应用程序调用32位COM库?

如果它在运行,它将在32位模式下运行,你不能在64位进程中有32位的东西,反之亦然。

这与在64位主机上运行32位进程是不一样的,显然,这是可行的。

另一种选择是第三方的东西实际上提供了一个64位参考,而你的结论是它运行32位是不正确的。

你。是这样的。不是。

将web应用程序设置为32位模式。这实际上是他们应该按照MS IIS指南运行的(大多数人都懒得去读)。

w3wp进程可以在32位模式下运行,因此可以处理32位程序集。查看您的IIS服务是否以32位模式运行。

我将此归结为解决方案所包含的大量代码和项目中的一些复杂性。将有问题的库要求为64位已经解决了这个问题,但自然不能回答这个问题。

它通过dllproxy机制工作,当您尝试加载错误位的com-dll时,该机制会自动创建DllHost进程。在这些情况下,您将获得隐式的进程间通信。看一下main.