gpt4 book ai didi

c++ - 为什么 COM 接口(interface)契约是不可变的?

转载 作者:太空狗 更新时间:2023-10-29 23:50:34 26 4
gpt4 key购买 nike

我在谷歌上搜索了很多,发现没有人关心解释为什么 COM 接口(interface)是不可变的,这很奇怪。我想您无法从 COM 接口(interface)中删除任何方法的原因是因为依赖该接口(interface)的客户端会遇到错误,这是不好的。但是,为什么向界面添加新功能会改变其中的任何一个呢?这与底层 vtable 有关系吗?

最佳答案

COM 有一个非常严重的 DLL hell 问题。几个基本原因:

  • 参与编写服务器和客户端代码的程序员彼此很少认识,不一起工作并且有自己的发布计划。
  • 默认情况下,注册服务器是在机器范围内进行的,这会影响依赖于服务器的每个客户端程序。使用无注册 list 的隔离 COM 是一种解决方法。
  • 早期绑定(bind) COM(使用 v 表)非常高效,但对 v 表更改极度不耐受。当客户端代码简单地调用完全错误的函数或传递错误的参数时,很难诊断不匹配。通过 IDispatch 进行后期绑定(bind)调用是一种解决方法,但速度较慢。
  • COM 程序员作弊的动机非常强烈,更改接口(interface) {guids} 会导致脾气暴躁的客户端程序员和尴尬的支持电话。使接口(interface)向后兼容相对容易,使其向前兼容永远行不通。只有更改界面 guid 才是真正安全的。
  • 部署 COM 服务器通常是客户的责任,他们通常对服务器的了解不够,无法解决和纠正问题。

这些都是通用的版本控制问题,许多运行时实现都遭受了不同程度的痛苦。 COM 的一个特殊优势是您可以对其进行一些处理。更改 {guids},很多麻烦都消失了。

关于c++ - 为什么 COM 接口(interface)契约是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29056322/

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