gpt4 book ai didi

azure - Windows Azure 上的 32 位旧版 COM DLL

转载 作者:行者123 更新时间:2023-12-04 03:46:13 26 4
gpt4 key购买 nike

我在我的 Web 应用程序中使用大约 15-20 个旧版 32 位 C++ COM DLL,其中一些 32 位 DLL 具有第 3 方依赖项,这些依赖项是 DLL 的 COM 或 native 依赖项。

我正在考虑迁移到 Windows Azure,据我所知,它是一个 64 位平台。谁能告诉我我的 32 位 DLL 是否可以工作? (我知道现在可以对它们进行 regsvr32)。

经过一两周的工作,我可以将 DLL 重新编译为 64 位,但这对于第 3 方依赖项来说是不可能的,因为我没有源代码。

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

即我应该将 32 位 DLL 移过去并依赖 WoW64 - 这还能工作吗?我不介意性能受到一点影响。

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

最佳答案

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

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

  1. 什么类型的 COM 接口(interface)(是否兼容自动化)?
  2. 它们支持哪种类型的编码(仅限进程内或进程外)
  3. 如果编码(marshal)处理跨进程工作,您是否可以控制如何注册对象(进程内或进程外)。
  4. 为您的对象创建托管包装器(例如由 32 位进程托管并能够使用 WCF 或 COM 自动化与 64 位主机通信的自定义 C++/CLI 互操作程序集)是否容易?

我不知道它是否有效,但要考虑的另一个选择是尝试强制应用程序池作为 32 位进程运行。您需要在完全信任的 IIS 模式下运行,并将其作为您的角色启动任务运行:
appcmd apppool set/apppool.name:/enable32BitAppOnWin64:true
您必须确定您的应用程序将使用的应用程序池的名称。再说一次,我不确定这是否有效,但我想值得一试,因为如果它有效,这对你来说将是最简单的选择。

关于azure - Windows Azure 上的 32 位旧版 COM DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com