【问题标题】:COM, COM+, DCOM, where to start?COM、COM+、DCOM,从哪里开始?
【发布时间】:2010-10-28 08:37:15
【问题描述】:

我对 COM+、DCOM 很好奇。我知道 MSFT 不鼓励你在本地使用这个工具(意思是 C/C++,实际上没有很多可用的文档),但我想学习使用这些技术,比如将 Internet Explorer 嵌入到 C 程序中。

我想也许我可以找到从事这项工作或了解这项技术的人。

从哪里开始?有任何想法吗?任何示例(如 Hello World DCOM)?

【问题讨论】:

  • 顺便说一句,不要因为我们的答案所建议的学习量而气馁。听起来您正在尝试编写 COM 客户端而不是 COM 组件。 COM 客户端比 COM 组件更容易编写。你会玩得很开心。

标签: c++ c com com+ dcom


【解决方案1】:

其实,如果你想了解更多关于 COM 的知识,微软出版了一本关于 COM 及其工作原理的书...http://www.amazon.com/Inside-Microsoft-Programming-Dale-Rogerson/dp/1572313498/ref=sr_1_2?ie=UTF8&s=books&qid=1243029018&sr=8-2

【讨论】:

  • 这是最先进的吗?好像有点老了。
  • COM 已旧。在过去的 8 年中,Microsoft Press 的所有内容都与 .NET 有关。
  • @Cheeso 是对的; COM 是一项古老的技术。微软的大部分新开发都专注于 .NET,但 COM 开发仍然完全有效;只是你会在上面找到的大多数参考资料都会有点旧。
  • “内部 COM”是一本很棒的书。在 COM 很火的时候,我读了几本 COM 书籍,那是最有意义的书。 Don Box 的“Essential COM”将是一本很好的第二书,但它包含太多细节。 “Inside COM”更容易上手,涵盖了要点。 (我不认为“基本” COM 中的所有内容都是必不可少的!)
【解决方案2】:

COM、COM+ 和 DCOM 是三个完全不同的东西。在这一点上,几乎没有理由学习 COM,几乎没有理由学习 DCOM。我能想到的唯一原因是您是否必须维护或集成遗留组件。 COM+ 仍在使用,因为它允许在进程外托管组件以及分布式事务管理等好东西。

开始编写一些 COM 的最佳方式是使用 ATL。在 .NET COM+ 中称为Enterprise Services。

我所知道的关于 COM 的最好的书是 Don Box 的 Essential COM 和 Tim Ewald 的 COM+ book 也非常出色。

【讨论】:

  • Windows 8 的新 WinRT 内核基于 COM。多年来,对 COM 有深入了解的商业程序员的需求量很大,并且在未来的很多年里都将继续受到需求。
【解决方案3】:

如果您想使用或扩展各种 Windows API(例如 shell 扩展、脚本主机等),COM 仍然很有用。

Essential COM(Box)和 ATL Internals(Rector 和 Sells)是极好的资源。有效的 COM (Box, et al) 也可以。

如果您真的想要 COM 的全貌,请尝试获取巨大的 Inside OLE (Brockschmidt) 的副本。

分布式 COM (Eddon, Eddon) 在 DCOM 上很不错,就像在 COM+ 上的 Inside COM+ Base Services (Eddon, Eddon) 一样。

即使是一些所谓的“纯”C++ 书籍,也有一些关于 COM 的内容。 Matthew Wilson 的 Imperfet C++ 有一些有用的部分可以了解它的内部工作原理,他的 Extended STL 书中有几章介绍了如何使 COM 适应 STL 集合。

如果您想了解更多关于如何编写 COM 服务器的信息,您可能需要熟悉 ATL。前面提到的 ATL 内部是必须的。尽管它的标题听起来很不起眼,但开始 ATL COM 中也包含一些有用的东西。

对学习过程也有帮助的可能是将 COM 与 .NET 进行对比。 .NET 和 COM 互操作性手册是一本大书,但里面有一些有用的东西。另外,我会查看 Shared Source CLI Essentials,以帮助对比这两种技术。

HTH

【讨论】:

  • >Essential COM (Box, et al) 也可以...您的第二个条目是“有效 COM”,对吧?
  • 反之。感谢您发现它。
  • 真的吗? “Effective COM”是 Box, Brown, Ewald & Sells。 “基本 COM”仅适用于 Box。这两本书都很棒。
【解决方案4】:

Essential COM 专门用于从 C++ 实现或使用 COM 组件,而无需使用 IDE、框架或库来提供帮助。

COM 在 VB 或 Delphi 中使用起来很简单,例如,它们对应用程序程序员隐藏了特定于 COM 的粘合剂。在 C++ 中,您经常会使用一些试图抽象细节的类库...... Essential COM 会告诉您这些细节是什么(并且在这样做时会实现自己的库/框架)。

【讨论】:

    【解决方案5】:

    如果你认真学习 COM,Don Box 的《Essential COM》绝对是一本绝对的“必读”。 COM 可能会令人困惑,在我看来,Don Box 是少数真正“明白”的人之一。

    “Essential COM”中的示例代码是 C++。你不会找到很多支持 C 语言的书。你可以用 C 语言编写 COM,但是会非常非常、非常痛苦。 COM 针对 C++ 开发进行了优化。

    这本书既不完美也不“完整”。这本书略读了一些(当然,有点深奥)领域。例如,这本书有大约 1 1/2 页的“绰号”(我从未见过让我满意的绰号处理)。我认为这本书是最基础的书。

    其次,在现实生活中,您可能希望使用 ATL 等支持库,而不是直接编写所有 COM 胶水。即使在基本设置中,也有太多方法可以在 COM 中犯细微的错误。 ATL 将为您提供良好的模式并为您实现无聊的代码。在学习中,最好使用纯 C++。

    关于 ATL 的书籍很多,有几本相当不错。我知道自 VC++6 的旧时代以来,ATL 已经发生了很大变化,但我没有第一手的知识:遗憾的是,我使用的大部分 COM 代码永远锁定在 VC6 中的 C++ 风格.

    确保您获得的任何书籍都是针对您计划使用的 Visual Studio 和/或 ATL 版本编写的。

    COM 书籍的一些背景知识:

    请注意,有很多书误解了 COM,或者关注了错误的事情。旧书在这方面更差。前几本书中的一些将 COM 视为使 OLE 工作所需的管道细节(“对象链接和嵌入”,这就是允许您将电子表格范围拖放到 Word 文档中的原因)。正因为如此,那里的很多材料都非常混乱。人们过了一段时间才意识到 OLE 并不那么重要,而 COM 确实如此。

    当 Don Box 发表《Essential COM》时,COM 基础上的裂痕已经开始显现。 COM 没有任何严重的缺陷,但开发社区的需求已经发展并超出了 COM 在不进行重大改造的情况下可以做的事情。

    .NET 的诞生就是为了解决 COM 中的局限性,尤其是在“类型信息”领域。在“Effective COM”出版仅仅几年之后,社区的注意力就转移到了.NET。正因为如此,好的 COM 培训材料现在而且很可能永远是有限的。

    所以,COM 没有损坏,它在它所用的东西上工作得很好(这就是 Explorer 仍然使用它的原因)。对于当今需要解决的许多问题,它不再是最佳解决方案。

    总结:

    我推荐“基本 COM”作为基础。然后,可以使用许多优秀的 ATL 书籍中的任何一本(那里没有强烈的偏好),然后使用其他资源,如 MSDN 或 - 当然 - Stack Overflow,来涵盖您特别感兴趣的领域。

    如果您不想依赖死树资源,请继续从网络学习 ATL。但是有些书值得以老式的方式阅读——《Essential COM》就是其中之一。

    祝你好运。

    【讨论】:

      【解决方案6】:

      从“Inside COM”开始,然后转到“Inside DCOM”,然后阅读“Essential COM”。您将掌握 COM。 Inside COM 和 Inside DCOM 这两本书都是 Microsoft Publications。适合想要彻底了解 COM/DCOM 的人的好书。

      【讨论】:

        【解决方案7】:

        我整理了一个书单,应该按这个顺序阅读:

        1. Dale Rogerson 的“Inside COM”,这应该是您的第一本书。它解释了引用计数、接口、IUnknown、组件、idl、IDispatch、自动化类型和公寓的基础知识。从这本书中你会注意到,制作组件需要相当多的代码,而且你可以很容易地跳过一个'Release',这会导致资源泄漏。这本书也缺少一些细节。
        2. 来自 Tavares 的“ATL 内部”。 ATL 可帮助您将两种客户端用作制作 COM 组件。如今,使用智能指针(例如 CComPtr)很难弄错引用计数。 ATL 还有助于在 c++ 中制作组件。不幸的是,ATL 在宏中隐藏了许多功能,并且有一种反直观的方式来实现 IUnknown。另一种选择可能是“内部 ATL”。
        3. 来自 Don Box 的“基本 COM”。这本书经常被提及,但它不是一本好的初学者书籍。它忽略了整体情况,但细节很棒(例如 idl 中 'size_is' 和 'length_is' 之间的区别)。
        4. “了解 ActiveX 和 OLE:开发人员和管理人员指南”。本书涉及一些更深奥的接口,如 IPersist、IStorage; IMoniker 等,但没有详细说明。

        请注意,COM 在某种程度上是一项古老的技术,但仍然适用于本地开发人员。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-17
          • 2014-10-07
          • 1970-01-01
          • 2014-04-17
          • 1970-01-01
          • 2011-03-04
          • 1970-01-01
          • 2010-09-07
          相关资源
          最近更新 更多