Windows Azure上的32位旧版COM DLL

时间:2011-03-26 15:48:21

标签: azure 32bit-64bit

我在我的网络应用程序中使用了大约15-20个传统的32位C ++ COM DLL,其中一些32位DLL具有第三方依赖项,这些依赖项是DLL的COM或本机。

我正在考虑迁移到Windows Azure,我理解这是一个64位平台。任何人都可以建议我的32位DLL是否可行? (我知道现在可以注册它们了。)

在一两个星期的工作中,我可以将我的DLL重新编译为64位,但是由于我没有源代码,这对于第三方依赖项是不可能的。

据我所知,Windows Azure使用64位,所以我想知道迁移我的应用程序的最佳方法是什么?

即。我应该移动32位DLL并依赖WoW64 - 这甚至可以工作吗?我不介意小小的表现。

或者重新编译我的64位应用程序并且以某种方式使用32位DLL会更好吗?

2 个答案:

答案 0 :(得分:9)

答案是肯定的。 Windows Azure就像普通的Windows Server 2008 x64一样,它有32位子系统。这里唯一的限制是Web角色和辅助角色托管过程是64位。

考虑到这一点,您将不得不在64位主机进程和32位DLL之间进行某种互操作。当然,在这种情况下,inproc COM对象将不起作用。在不知情的情况下很难给出更具体的建议:

  1. 什么类型的COM接口(自动化兼容与否)?
  2. 他们支持什么样的编组(仅限过程或过程)
  3. 如果编组工作跨进程,您是否可以控制如何注册对象(inproc或out-of-proc)。
  4. 为对象创建托管包装器有多容易(例如由32位进程托管并能够使用WCF或COM自动化与64位主机通信的自定义C ++ / CLI互操作程序集)
  5. 我不知道它是否可行,但另一个需要考虑的选择是试图强迫你的应用程序池以32位进程运行。您需要以完全信任的方式在IIS模式下运行,并将其作为角色启动任务运行:
        appcmd apppool set /apppool.name:/ enable32BitAppOnWin64:true
    您必须确定将使用您的应用程序的应用程序池的名称。而且,我不确定它会起作用,但我想这值得一试,因为如果它有效,它将是最简单的选择。

答案 1 :(得分:2)

Windows Azure培训套件中的此实验"Advanced Web and Worker Roles"涵盖了在Azure中使用旧版COM dll。