COM,COM +,DCOM,从哪里开始?

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

我想也许我可以找到那些使用过这个或那个知道这项技术的人。

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

如果你认真学习COM,Don Box的“Essential COM”肯定是绝对的“必读”。 COM可能令人困惑,在我看来,Don Box是为数不多的实际上“得到它”的人之一。

“Essential COM”中的示例代码在C ++中。 你不会在C中找到很多支持COM的书。你可以用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中的局限性,特别是在“类型信息”领域。 就在“有效COM”出版几年后,社区的注意力转移到了.NET。 因此,良好的COM培训材料现在并且可能永远受限。

因此,COM没有被破坏,它对于它所使用的东西非常有用(这就是Explorer仍然使用它的原因)。 对于今天需要解决的许多问题,它不再是最佳解决方案。

综上所述:

我推荐基本的“Essential COM”。 然后,可以获得许多优秀的ATL书籍(没有强烈的偏好),然后使用其他资源,如MSDN或 – 当然 – Stack Overflow,以涵盖您特别感兴趣的领域。

如果您宁愿避免依赖死树种类的资源,请继续从网上学习ATL。 但是有些书值得用老式的方式阅读 – 而“Essential COM”就是其中之一。

祝好运。

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

开始编写COM的最佳方法是使用ATL 。 在.NET中,COM +称为企业服务 。

我在COM上知道的最好的书是Don Box的Essential COM和Tim Ewald的COM +书也很棒。

我编制了一份书籍清单,应按以下顺序阅读:

  1. 来自Dale Rogerson的’Inside COM’,这应该是你的第一本书。 它解释了引用计数,接口,IUnknown,组件,idl,IDispatch,自动化类型和公寓的基础知识。 在本书中,您会注意到制作组件需要相当多的代码,并且您可以轻松跳过“发布”,这会导致资源泄漏。 这本书也缺乏一些细节。
  2. 来自塔瓦雷斯的’ATL Internals’。 ATL帮助您将客户端用作制作COM组件。 使用智能指针(例如CComPtr),这些天很难让引用计数错误。 ATL还有助于用c ++制作组件。 不幸的是,ATL在宏中隐藏了许多function,并且具有实现IUnknown的反直觉方式。 另一种选择可能是“内部ATL”。
  3. 来自Don Box的’Essential COM’。 这本书经常被提到,但它不是一本好的初学者书。 它错过了整体情况,但其细节很好(例如,idl中’size_is’和’length_is’之间的差异)。
  4. ‘了解ActiveX和OLE:开发人员和经理指南’。 这本书涉及一些更为深奥的界面,如IPersist,IStorage; IMoniker等,但没有详细介绍。

请注意,COM在某种程度上是一种旧技术,但对于本地开发人员来说仍然可行。

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

Essential COM(Box)和ATL Internals(Rector and Sells)是很好的资源。 有效的COM(Box,等)也行。

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

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

即使是一些所谓的“纯粹”C ++书籍也有关于COM的内容。 Matthew Wilson的Imperfet C ++有一些有用的部分可以看到它在内部如何工作,他的扩展STL书有几章关于如何使COM适应STL集合。

如果您想了解有关如何编写COM服务器的更多信息,您可能需要了解ATL。 上述ATL Internals是必须的。 尽管它的声音很低,但起始ATL COM也有一些有用的东西。

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

HTH

从“Inside COM”开始,然后转到“Inside DCOM”,然后阅读“Essential COM”。 你将掌握COM。 Inside COM和Inside DCOM中的书籍都是Microsoft Publications。 想要彻底了解COM / DCOM的人的优秀书籍。

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

例如,从VB或Delphi中使用COM是很容易的,它隐藏了应用程序编程人员特定于COM的粘合剂。 在C ++中,你经常使用一些试图抽象细节的类库…… Essential COM将告诉你这些细节是什么(以及实现它自己的库/框架的类型)。

实际上,如果你想了解有关COM的更多信息,微软会出版一本关于COM及其工作原理的书… http://www.amazon.com/Inside-Microsoft-Programming-Dale-Rogerson/dp/1572313498/ref= sr_1_2?IE = UTF8&S =书籍和QID = 1243029018&SR = 8-2