我很好奇COM +,DCOM。我知道MSFT不鼓励你原生使用这个工具(意思是用C / C ++,实际上没有很多文档可用)但我想学习使用这些技术,比如将Internet Explorer嵌入到C程序中。
我想也许我可以找到那些与此有关或知道这项技术的人。
从哪里开始?有任何想法吗?任何例子(如Hello World DCOM)?
答案 0 :(得分:37)
如果你认真学习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”就是其中之一。
祝你好运。答案 1 :(得分:11)
COM,COM+和DCOM是完全不同的三件事。在这一点上,没有理由学习COM,几乎没有理由学习DCOM。我能想到的唯一原因是您是否必须维护或集成遗留组件。 COM +仍在使用,因为它允许进程外托管组件和分布式事务管理等好东西。
开始编写某些COM的最佳方法是使用ATL。在.NET中,COM +被称为Enterprise Services。
我在COM上认识的最好的书是Don Box的Essential COM,而Tim Ewald的COM+ book也很出色。
答案 2 :(得分:6)
我编制了一份书籍清单,应按此顺序阅读:
请注意,COM在某种程度上是一种旧技术,但对于本地开发人员来说仍然可行。
答案 3 :(得分:3)
如果您想使用或扩展各种Windows API(例如shell扩展,脚本主机等),COM仍然很有用。
Essential COM(Box)和ATL Internals(Rector and Sells)是极好的资源。有效的COM(Box,等)也没问题。
如果你真的想要关于COM的完整图片,请尝试获取巨大的Inside OLE(Brockschmidt)的副本。
分布式COM(Eddon,Eddon)在DCOM上很不错,就像COM +上的内部COM +基础服务(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
答案 4 :(得分:3)
从“Inside COM”开始,然后转到“Inside DCOM”,然后阅读“Essential COM”。你将掌握COM。 Inside COM和Inside DCOM中的书都是Microsoft Publications。想要彻底了解COM / DCOM的人的优秀书籍。
答案 5 :(得分:2)
Essential COM 特别适用于从C ++实现或使用COM组件,而无需使用IDE,框架或库来提供帮助。
例如,从VB或Delphi中使用COM是很容易的,它隐藏了应用程序编程人员特定于COM的粘合剂。在C ++中,你经常使用一些试图抽象细节的类库...... Essential COM 将告诉你这些细节是什么(以及实现它自己的库/框架的类型)。答案 6 :(得分:1)
实际上,如果您想了解有关COM的更多信息,Microsoft会发布一本关于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