【问题标题】:Scenarios where Clients application needs to rebuild客户端应用程序需要重建的场景
【发布时间】:2013-12-07 08:03:59
【问题描述】:

我需要知道客户端应用程序需要重建的场景,我很少,如果有任何其他场景,请告诉我。

1) 我在现有的 CoClass 中添加了一个新接口,它的方法构建了新的 dll 并将其复制到客户端计算机中,是否需要重新构建客户端应用程序。

2) 我在现有的 DLL 项目中添加了一个新的 CoClass 和接口和方法,构建新的 dll 并将其复制到客户端计算机中,是否需要重新构建客户端应用程序。

所以我的问题是,假设旧客户不需要新功能,是否需要重建?

注意:所有新旧客户端应用程序都是 .NET 客户端,因此有一个 .NET 互操作层(无论如何都需要更改)但是旧客户端呢

感谢您的帮助

问候

尼尔

【问题讨论】:

    标签: visual-c++ com atl


    【解决方案1】:

    我假设后期绑定是客户端使用 COM 服务器的首选方式。对现有接口的任何更改都需要该接口获得不同的 IID。一个非常重要的 DLL Hell 对策。此类更改包括插入或删除方法以及更改现有方法的任何参数。 IID 的更改需要重新构建客户端,以便它知道使用新的 IID。

    不会破坏客户端的更改:

    • 将方法附加到接口的末尾。在这种情况下不更改 IID 是有风险的,但更改是向前兼容的。由于客户端还不知道该方法存在。但是,一旦更改为利用该方法,它就不再向后兼容。如果它与旧版本的 COM 服务器一起运行并使用早期绑定,它将严重崩溃。仅当您可以严格控制服务器和客户端的部署时才考虑这一点,这不是很常见。强烈建议更改 IID。

    • 将接口添加到 coclass。这是向前兼容的,同样客户端还不知道新接口。直到它被修改以利用它。使用旧版本运行可提供合理的诊断,即 E_NOINTERFACE。

    • 添加一个新的 coclass。与前一个项目符号一样向前兼容。使用旧版本运行会生成 REGDB_E_CLASSNOTREG 诊断信息。

    所以你给出的两个项目符号实际上不是必须重新编译客户端的理由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2015-11-24
      相关资源
      最近更新 更多