繁体   English   中英

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

[英]Why am I able to call a 32 bit COM library from an AnyCPU .NET web application running in IIS7 in 64 bit mode?

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

我在 64 位 .NET 进程中成功地从 32 位 COM 互操作库实例化类。

w3wp 在 64 位模式下运行,并且 IIS 配置设置为不允许 32 位应用程序。 除此之外,还有一个专门 x64 编译和注册的 .NET 程序集。

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

有趣的是,如果代码是使用 Visual Studio 2008 编译的,目标是 3.5 框架,这将非常有效。 如果使用针对 3.5 框架的 Visual Studio 2010 编译相同的代码,则应用程序在尝试加载 32 位 COM 互操作库时会严重失败。 正如它应该。

如果它正在运行,它将以 32 位模式运行,你不能在 64 位进程中拥有 32 位的东西,反之亦然。 一个过程完全是一个或另一个。

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

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

我将把它归结为解决方案所包含的大量代码和项目中的一些复杂性。 将违规库的要求删除为 64 位已经解决了这个问题,但自然不会回答这个问题。 它只会让它过时。

你。 是。 不是。

观点。

将 web 应用程序置于 32 位模式。 这实际上是他们应该按照 MS IIS 指南运行的方式(大多数人从不费心阅读)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM