我在我的网络应用程序中使用了大约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会更好吗?
答案 0 :(得分:9)
答案是肯定的。 Windows Azure就像普通的Windows Server 2008 x64一样,它有32位子系统。这里唯一的限制是Web角色和辅助角色托管过程是64位。
考虑到这一点,您将不得不在64位主机进程和32位DLL之间进行某种互操作。当然,在这种情况下,inproc COM对象将不起作用。在不知情的情况下很难给出更具体的建议:
我不知道它是否可行,但另一个需要考虑的选择是试图强迫你的应用程序池以32位进程运行。您需要以完全信任的方式在IIS模式下运行,并将其作为角色启动任务运行:
appcmd apppool set /apppool.name:/ enable32BitAppOnWin64:true
您必须确定将使用您的应用程序的应用程序池的名称。而且,我不确定它会起作用,但我想这值得一试,因为如果它有效,它将是最简单的选择。
答案 1 :(得分:2)
Windows Azure培训套件中的此实验"Advanced Web and Worker Roles"涵盖了在Azure中使用旧版COM dll。