不使用COM +代理服务,我很高兴能够使用来自使用目标AnyCPU编译的.NET应用程序的32位COM互操作库中的类,在64位w3wp进程中运行。
我在64位.NET进程中成功地从32位COM互操作库中实例化了类。
w3wp以64位模式运行,并且IIS配置设置为不允许32位应用程序。事实上,有一个专门的x64编译和注册的.NET程序集。
我只是想知道,这怎么可能呢?
值得关注的是,如果使用Visual Studio 2008编译代码,并且针对3.5框架,则这种方法非常有效。如果使用Visual Studio 2010编译相同的代码,以3.5框架为目标,则在尝试加载32位COM互操作库时,应用程序会失败。应该如此。
答案 0 :(得分:3)
如果它正在运行,它将以32位模式运行,在64位进程中不能有32位内存,反之亦然。一个过程完全是一个或另一个。
这与在64位主机上运行32位进程不同,显然有效。
另一种选择是第三方的东西实际上是提供64位参考,而你运行32位的结论是不正确的。
答案 1 :(得分:1)
您。是。不
点。
将Web应用程序置于32位模式。这实际上是他们应该按照MS IIS指南运行的方式(大多数人都懒得阅读)。
答案 2 :(得分:1)
w3wp进程可以在32位模式下运行,因此可以处理32位程序集。查看IIS服务是否以32位模式运行。
答案 3 :(得分:1)
我将在解决方案所包含的代码和项目的数量上复杂化。删除违规库的要求为64位已经解决了这个问题,但自然不能回答这个问题。它只是让它过时了。
答案 4 :(得分:0)
它通过DllSurrogate机制工作,当您尝试加载错误位数的com-dll时,该机制自动创建DllHost进程。在这些情况下,您将获得隐式进程间通信。只需看看main。