2009-05-22 39 views
28

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

我以为也许我可以找到与此相关的人或知道此技术的人。

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

+4

顺便说一句,不要对我们的答案建议的学习量感到灰心。这听起来像您正在尝试编写COM客户端而不是COM组件。 COM客户端比COM组件更容易编写。你会很开心。 – 2009-05-25 14:02:24

回答

34

如果你对学习COM很认真,Don Box的“Essential COM”肯定是绝对的“必读”。投诉人可能会感到困惑,并且在我看来,Don Box是为数不多的真正“明白”的人之一。

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

这本书不完美也不“完整”。这本书有一些(理所当然,有点深奥)地区。例如,这本书有1/2页“monikers”(我从来没有见过满足我的绰号治疗)。我认为这本书是基本的书。

其次,在现实生活中,您可能希望使用支持库(如ATL),而不是直接编写所有COM胶水。即使在基本设置中,在COM中发生微妙错误的方式也有很多。 ATL会给你很好的模式并为你实现无聊的代码。在学习中,你最好使用纯C++。

有很多关于ATL的书,其中有些很不错。我知道自从VC++ 6过去以来,ATL已经发生了很大的变化,但我并没有掌握第一手知识:可悲的是,我所使用的大多数COM代码都被锁定在VC6中的C++风格上。

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

上COM书籍一些背景资料:

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

Don Box公布“基本COM”时,COM基础上的裂缝已经开始显现。 COM没有什么可怕的缺陷,但发展社区的需求已经发展并超过了COM如果不进行重大改造就可以做的事情。

.NET诞生于努力解决COM中的局限性,尤其是在“类型信息”领域。在“Effective COM”发布几年后,社区的注意力转移到了.NET上。因此,现在好的COM培训材料可能会永远受到限制。因此,COM没有被破坏,它对于它所用的东西非常有用(这就是为什么Explorer仍然使用它)。对于今天需要解决的许多问题,这不是最好的解决方案。

总结:

我建议 “的基本COM” 为基础。然后,可以使用许多优秀的ATL书籍(没有强烈的偏好),然后使用其他资源,如MSDN或当然Stack Overflow来覆盖您感兴趣的领域。

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

祝你好运。

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

+0

这是最先进的吗?它似乎有点古老。 – 2009-05-22 21:55:55

+3

COM老了。在过去的8年中,所有微软出版社的内容都是关于.NET的。 – Cheeso 2009-05-22 22:09:41

+0

@Cheeso是对的; COM是一种古老的技术。微软在其大部分新开发中都将重点放在.NET上,但COM开发仍然是完全有效的;只是大部分你会发现它的参考文献都会有些陈旧。 – 2009-05-22 22:14:46

10

COMCOM+DCOM三种完全不同的事情。此时,学习COM几乎没有理由,也几乎没有理由学习DCOM。我能想到的唯一原因是如果您必须维护或集成传统组件。 COM +仍然被使用,因为它允许进程托管组件和分布式事务管理等好事。

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

我在COM上了解到的最好的书是Don Box的Essential COM和Tim Ewald的COM+ book也很棒。

3

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

必要的COM(Box)和ATL内部(Rector and Sells)是很好的资源。有效的COM(Box等)也可以。

如果你真的想要在COM上的完整画面,尝试获得巨大的内部OLE(Brockschmidt)的副本。与COM +中的COM + Base Services(Eddon,Eddon)一样,分布式COM(Eddon,Eddon)在DCOM上体面也不错。

甚至有些被认为是“纯粹”的C++书籍在它们的COM上也有一些位。 Matthew Wilson的Imperfet C++有一些有用的部分可以看到它在内部是如何工作的,他的扩展STL书籍中有几章介绍如何使COM适应STL集合。

如果您想了解更多关于如何编写COM服务器的信息,您可能需要了解ATL。前述的ATL内部构件是必须的。尽管ATL COM标题听起来不错,但它也有一些有用的东西。

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

HTH

2

基本COM是特别用于实现或使用从C++ COM组件,而不使用IDE,框架,或库,以帮助。

COM很容易从VB或Delphi中使用,例如,它隐藏了来自应用程序员的COM专用粘合剂。在C++中,你经常使用一些试图抽象细节的类库...必不可少的COM会告诉你这些细节是什么(并且这样做的实现它自己的库/框架)。

3

从“Inside COM”开始,然后进入“Inside DCOM”,然后阅读“Essential COM”。你将掌握COM。 Inside COM和Inside DCOM都是Microsoft出版物。对于想要彻底了解COM/DCOM的人来说,这是一本优秀的书籍。

6

我编的书单,应该按以下顺序读:

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

请注意,COM是一种古老的技术,虽然仍然可行,尤其是对于本地开发人员。